[SFML] Poruszanie Sprita przy pomocy strzałek wolne działanie
Ostatnio zmodyfikowano 2012-11-14 20:34
wojownik266 Temat założony przez niniejszego użytkownika |
[SFML] Poruszanie Sprita przy pomocy strzałek wolne działanie » 2012-11-14 15:33:06 Poniżej prezentuję kod programu którego zadaniem jest przemieszczanie obiektu przy pomocy strzałek w prawo i lewo. Program działa tak jak działa... Proszę zwrócić uwagę na zmienną statx w instrukcjach if. Zmienna statx jest zwiekszana co pięć jednostek ale porusza się z taką prędkością jaką można w SFML 1.6 osiągnąć pisząc statx+=0.5. Jednym słowem bardzo "muli". Czy to jest normalne zachowanie w SFML 2.0 Czy jakieś niedorobienie? Czy może wina mojego komputera? Co więcej w czasie przesuwania obiektu strzałką np w lewo i naciśnięciu w między czasie innego klawisza np spacji, powoduje nagłe zatrzymanie obiektu. Dopiero ponowne naciśniecie strzałki i zwolnienie spacji pozwala na dalsze przesuwanie obiektu... Czym to wszystko co opisałem wyżej, może być spowodowane? Kod wydaje mi się że jest napisany poprawnie...!? więc gdzie "pies pogrzebany"? Co robić? Pomocy! #include <SFML/Graphics.hpp>
int main() { sf::RenderWindow App( sf::VideoMode( 640, 480, 32 ), "Klawisze strzalek poruszanie" ); sf::Texture statek; statek.loadFromFile( "statek.png" ); sf::Sprite Statek( statek ); float statx = 320, staty = 420; while( App.isOpen() ) { App.clear(); sf::Event Event; while( App.pollEvent( Event ) ) { if(( Event.type == sf::Event::Closed ) ||( Event.type == sf::Event::KeyPressed ) &&( Event.key.code == sf::Keyboard::Escape ) ) { App.close(); } else if(( Event.type == sf::Event::KeyPressed ) &&( Event.key.code == sf::Keyboard::Left ) ) { statx -= 5.0; } else if(( Event.type == sf::Event::KeyPressed ) &&( Event.key.code == sf::Keyboard::Right ) ) { statx += 5.0; } } Statek.setPosition( statx, staty ); App.draw( Statek ); App.display(); } return EXIT_SUCCESS; }
|
|
bingo009 |
» 2012-11-14 18:33:51 Co do pierwszego to nie wiem, bo sam mam z tym problem, ale z drugim mogę ci powiedzieć. Jeżeli chcesz obsłużyć więcej, niż jeden klawisz, to nie opieraj tego na Eventach. Teraz jak naciśniesz też Spację, to Eventy pokrywają się i nic z tego nie wychodzi. Odwołuj się bezpośrednio do klawiatury, to rozwiąże problem. |
|
RazzorFlame |
» 2012-11-14 18:36:07 Nie wiem czy to jest w SFML 2 ale w 1.6 jest bezpośredni dostęp do sprzętu typu klawiatura, joy itd. Zainteresuj się sf::Input w SFML 1.6 i metodą klasy sf::RenderWindow::GetInput(). Jest poza tym dokumentacja na oficjalnej stronie.
BTW. Wiesz co to opóźnienie klawiszy? W zwykłych eventach tak jest. Jest to przydatne powiedzmy w EditBox-ie bo klawisze zaczynają powtarzać się dopiero po ustalonym w opcjach klawiatury (w panelu sterowania) opóźnieniu. |
|
wojownik266 Temat założony przez niniejszego użytkownika |
» 2012-11-14 18:37:01 A jakby to odwołanie miało z grubsza wyglądać? Mogę prosić o kawałek kodu? |
|
RazzorFlame |
» 2012-11-14 18:42:19 Moge ci podać w sfml 1.6 bo z niego korzystam: while( app.IsOpened() ) { while( app.GetEvent( appEvent ) ) { jakiestam zdarzenia } const sf::Input & in = app.GetEvent(); if( in.IsKeyDown( id keya np sf::Key::Up ) wykonaj costam; }
|
|
bingo009 |
» 2012-11-14 19:20:20 Jest napewno bezpośrednie odwoływanie się do klawiatury, bo sam to używałem, tylko skasowałem kod. Poszukaj na stronie SFML, w Tutorialach i Dokumentacji. |
|
wojownik266 Temat założony przez niniejszego użytkownika |
» 2012-11-14 20:34:29 Już wszystko gra i buczy. Bardzo wam dziękuję za rozwiązanie problemu. |
|
« 1 » |