domin568 Temat założony przez niniejszego użytkownika |
[SFML] Przesuwanie sprite jak w prawdziwych grach 2D , jak takie coś zrobić ? » 2013-08-13 15:02:10 Witam , chce stworzyć sobie Haxballa , stworzyłem sobie taki bardzo prosty kod if( sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) ) { gracz.move( 4, 0 ); }
if( sf::Keyboard::isKeyPressed( sf::Keyboard::Left ) ) { gracz.move( - 4, 0 ); } if( sf::Keyboard::isKeyPressed( sf::Keyboard::Up ) ) { gracz.move( 0, - 4 ); } if( sf::Keyboard::isKeyPressed( sf::Keyboard::Down ) ) { gracz.move( 0, 4 ); }
Jednak ten kod mi nie wystarcza , bo jeżeli klikne 2 strzałki naraz , to musze poczekac okolo sekunde aż mi przejdzie i poruszy W lewy górny róg (na przykład ) , czy da się to jakoś zmienić (pewnie na pewno xd ) , czy trzeba operować czasem ? Dzięki za odp . |
|
abdi |
» 2013-08-13 15:08:55 && |
|
domin568 Temat założony przez niniejszego użytkownika |
» 2013-08-13 15:13:27 To i tak nic nie daje , jest identycznie , nawet robią się bugi , bo jedzie 2 razy szybciej , bo inne ify też są prawdziwe if( sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) && sf::Keyboard::isKeyPressed( sf::Keyboard::Up ) ) { gracz.move( 4, - 4 ); } if( sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) && sf::Keyboard::isKeyPressed( sf::Keyboard::Down ) ) { gracz.move( 4, 4 ); }
if( sf::Keyboard::isKeyPressed( sf::Keyboard::Left ) && sf::Keyboard::isKeyPressed( sf::Keyboard::Up ) ) { gracz.move( - 4, - 4 ); } if( sf::Keyboard::isKeyPressed( sf::Keyboard::Left ) && sf::Keyboard::isKeyPressed( sf::Keyboard::Down ) ) { gracz.move( - 4, 4 ); }
|
|
abdi |
» 2013-08-13 15:17:54 Hmmmm, może przesuwasz sprajta w pętli odbierającej zdarzenia?
A ona zachowuje się tak jakbyś wpisywał tekst w notatniku, wpisujesz jakiś tekst na początku jedna literka a potem leci ich dopiero więcej, tak samo jest z poruszaniem sprajta, najpierw porusza się odrobinkę a potem jedzie dopiero.
To właśnie dlatego może być spowodowane tym, że umieściłeś przesuwania sprajta w pętli komunikatów. tam gdzie masz pollEvent. |
|
domin568 Temat założony przez niniejszego użytkownika |
» 2013-08-13 15:41:02 No to w jaki sposób można to zmienić ? przecież tam wszystkie zdarzenia są przyjmowane |
|
kampar |
» 2013-08-13 15:41:29 użyj else if |
|
abdi |
» 2013-08-13 15:43:51 @domin
{ /* Tu daj dostęp do klawiatury w czasie rzeczywistym, do tego nie potrzebujesz komunikatów. Czyli ten twój kod poruszający sprajtem. */
while (tu pętla komunikatów, jest warunek z pollEvent ) {
} |
|
domin568 Temat założony przez niniejszego użytkownika |
» 2013-08-13 15:44:10 if( sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) ) { gracz.move( 4, 0 ); }
else if( sf::Keyboard::isKeyPressed( sf::Keyboard::Left ) ) { gracz.move( - 4, 0 ); } else if( sf::Keyboard::isKeyPressed( sf::Keyboard::Up ) ) { gracz.move( 0, - 4 ); } else if( sf::Keyboard::isKeyPressed( sf::Keyboard::Down ) ) { gracz.move( 0, 4 ); }
To jest troche bezsensu bo (po 1 działą tak samo , po 2 nie moge po przekątnych ) |
|
« 1 » 2 |