Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML] Prawidłowa rotacja względem myszy

Ostatnio zmodyfikowano 2015-11-27 14:38
Autor Wiadomość
Salin
Temat założony przez niniejszego użytkownika
[SFML] Prawidłowa rotacja względem myszy
» 2015-11-27 13:53:39
Witam, mam problem z prawidłowym rotowaniem sprite po tym jak zmienię pozycje kamery za pomocą klasy View i sam sprite opuści domyślny obszar okna. Robię sobie coś takiego:
C/C++
void Engine::runEngine( RenderWindow & window )
{
    bool menu = false;
   
    Clock zegar;
    View view( FloatRect( 60, 60, 1280, 720 ) );
   
    Time CzasOdAktualizacji = Time::Zero;
   
    const Time KrokCzasowy = seconds( 1.f / 60 );
   
   
    while( !menu )
    {
        Time Czas = zegar.restart();
        CzasOdAktualizacji += Czas;
       
        Vector2f mouse( Mouse::getPosition( window ) );
       
        while( CzasOdAktualizacji > KrokCzasowy )
        {
            CzasOdAktualizacji -= KrokCzasowy;
           
            Event event;
            while( window.pollEvent( event ) )
            {
                if( event.type == Event::Closed )
                {
                    menu = true;
                }
            }
           
            if( Keyboard::isKeyPressed( Keyboard::W ) )
                 player.idzW();
           
            if( Keyboard::isKeyPressed( Keyboard::D ) )
                 player.idzD();
           
            if( Keyboard::isKeyPressed( Keyboard::S ) )
                 player.idzS();
           
            if( Keyboard::isKeyPressed( Keyboard::A ) )
                 player.idzA();
           
            view.setCenter( player.getPosition() );
            player.update( mouse );
           
        }
        window.clear();
        window.setView( view );
        window.draw( player );
        window.display();
    }
}

Metoda update wygląda następująco:

C/C++
void Player::update( Vector2f & mouse )
{
    Vector2f norm = mouse - PlayerSprite.getPosition();
    float rotacja = atan2( norm.y, norm.x );
    rotacja = rotacja * 180.f / M_PI;
   
    rotacja += 90;
   
    PlayerSprite.setRotation( rotacja );
}

Prosiłbym o wyjaśnienie co mógłbym zrobić, aby w momencie, gdy pójdę nieco poza domyślny obszar kamery mój sprait nadal obracał się prawidłowo.
P-140907
maly
» 2015-11-27 14:08:49
Nie wnikam czy masz dobrze zrobione obliczenia ale poprawny sposób pobierania pozycji myszy jest taki:
C/C++
sf::Vector2f mouse = window.mapPixelToCoords( sf::Mouse::getPosition( window ) );
P-140908
Salin
Temat założony przez niniejszego użytkownika
» 2015-11-27 14:38:10
Niestety, ale w dalszym ciągu nie działa. Ogólnie obliczenia są poprawne, bo gdy wezmę sobie
window.setView( view );
 w komentarz to wtedy nie mam problemu z obracaniem. Problemy zaczynają się w momencie, gdy zmieniam pozycje kamery i wyjdę poza jej domyślne ustawienie. Jakby to ująć... Sprite cały czas jest wtedy skierowany, w kierunku w którym domyślnie jest ustawiona kamera.

@edit
Źle popatrzyłem, mój błąd, przepraszam za to. Zmieniłem pobieranie pozycji w zupełnie innej metodzie, która nie brała udziału w tym momencie. Po zastosowaniu tego co napisałeś wszystko zaczęło działać bez problemów. Dziękuję!
P-140910
« 1 »
  Strona 1 z 1