[SFML] Prawidłowa rotacja względem myszy
Ostatnio zmodyfikowano 2015-11-27 14:38
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: 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: 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. |
|
maly |
» 2015-11-27 14:08:49 Nie wnikam czy masz dobrze zrobione obliczenia ale poprawny sposób pobierania pozycji myszy jest taki: sf::Vector2f mouse = window.mapPixelToCoords( sf::Mouse::getPosition( window ) );
|
|
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ę! |
|
« 1 » |