[SFML] Rotacja obrazka
Ostatnio zmodyfikowano 2012-06-02 21:38
ksry Temat założony przez niniejszego użytkownika |
[SFML] Rotacja obrazka » 2012-06-02 12:52:50 mam tutaj skrypt na rotacje obrazka względem pozycji myszki gracz.sprite.setRotation( atan2(sf::Mouse::getPosition(ekran).y-(ekran_y/2), sf::Mouse::getPosition(ekran).x-(ekran_x/2)) * 180.f / 3.14159265 ); niby działa, ale nie tylko rotuje się ale i przesuwa wokół małej osi. Chciałbym, aby sprite został w nienaruszonej pozycji, jedynie obrazek się obracał. no i jak już zadaje pytanie, to czy nie wie ktoś jak zrobić, by moja aplikacja reagowała tylko jak jest na wierzchu? bo kiedy mam ją otwartą to może być nawet ukryta ale reaguje na wszystkie zdarzenia klawiatury, myszy.. kiedy zminimalizuje okno wszystkie czynności się zatrzymują - wie ktoś jak to naprawić? |
|
Hoto |
» 2012-06-02 13:06:54 Za co odpowiada ekran_y i ekran_x? |
|
ksry Temat założony przez niniejszego użytkownika |
» 2012-06-02 13:51:52 jest to długość i szerokość okna programu. |
|
Hoto |
» 2012-06-02 14:50:25 Spróbuj tak: gracz.sprite.SetRotation((( - 1 * 360 / 3.14159265 *( atan2( static_cast < double >( POZYCJA_Y - sf::Mouse::getPosition( ekran ).y ) ), static_cast < double >( POZYCJA_X - sf::Mouse::getPosition( ekran ).x ) ) ) ) / 2 ) + 90 );
Za POZYCJA_Y dajesz pozycje y, a za POZYCJA_X dajesz x ;p A co do tego okna to jest zdarzenie LostFocus i GainedFocus trzeba z nimi coś pokombinować. Odsyłam do dokumentacji: http://www.sfml-dev.org/tutorials/1.6/window-events.php |
|
ksry Temat założony przez niniejszego użytkownika |
» 2012-06-02 16:35:53 działa tak jak mój skrypt tylko przesuwa się w odwrotnym kierunku względem myszki. |
|
Admixior |
» 2012-06-02 20:08:35 ale nie tylko rotuje się ale i przesuwa wokół małej osi. |
A może nie dokładnie ustawiłeś SetCenter()? Pokażesz ten moment? bo kiedy mam ją otwartą to może być nawet ukryta ale reaguje na wszystkie zdarzenia klawiatury, myszy.. |
Jakbyś zrobił na otrzymywanie komunikatów w pętli, a nie za każdym razem ustawiał pozycje to pozbyłbyś się obciążenia procesora i rozwiązałby się problem. Nic byś nie musiał zmieniać oprócz drobnej rzeczy if( zdarzenie.Type == sf::Event::MouseMoved ) zdarzenie.MouseMove.X - LastMousePos.X zdarzenie.MouseMove.Y - LastMousePos.Y
i w tym if-ie korzystając z pozycji x i y myszki byś poruszał tym samym sposobem |
|
ksry Temat założony przez niniejszego użytkownika |
» 2012-06-02 21:38:34 hmm.. używam SFML 2 więc zastosowałem setOrigin(0, 0) i wyszło na to samo. przy zwiększaniu oś się poszerzała, przy zmniejszaniu nic się nie zmieniło. a co do tego z myszką, w ogóle nie zrozumiałem. wiem, oporny jestem |
|
« 1 » |