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

[SFML] Rotacja obrazka

Ostatnio zmodyfikowano 2012-06-02 21:38
Autor Wiadomość
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ć?
P-57693
Hoto
» 2012-06-02 13:06:54
Za co odpowiada ekran_y i ekran_x?
P-57694
ksry
Temat założony przez niniejszego użytkownika
» 2012-06-02 13:51:52
jest to długość i szerokość okna programu.
P-57700
Hoto
» 2012-06-02 14:50:25
Spróbuj tak:
C/C++
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
P-57705
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.
P-57708
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
C/C++
if( zdarzenie.Type == sf::Event::MouseMoved )
zdarzenie.MouseMove.X - LastMousePos.X //pozycja x myszki
zdarzenie.MouseMove.Y - LastMousePos.Y //pozycja y myszki

i w tym if-ie korzystając z pozycji x i y myszki byś poruszał tym samym sposobem
P-57712
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
P-57713
« 1 »
  Strona 1 z 1