[SFML] Chodzenie WSAD
Ostatnio zmodyfikowano 2017-11-14 21:41
pysiek.1996 Temat założony przez niniejszego użytkownika |
[SFML] Chodzenie WSAD » 2017-11-13 23:04:28 Witam. Chcę zrobić grę, w której postać widziana z góry porusza się za pomoca klawisz WSAD. Jednak moja postać nie porusza sie płynnie, na początku chwile stoi zanim zacznie sie poruszać oraz po przytrzymaniu klawiszy WD idzie w bok ale przy puszczeniu klawisza kliknietego jako drugi postać sie zatrzymuje jednak animacja ruchu sie odgrywa. Może ma to zwiazek z tym iż postać obraca sie wokół pozycji kursora while( window.pollEvent( event ) ) { if( event.type == Event::Closed ||( event.type == Event::KeyReleased && event.key.code == Keyboard::Escape ) ) menu = true; if( Keyboard::isKeyPressed( Keyboard::W ) ) pion = 1; if( !Keyboard::isKeyPressed( Keyboard::W ) ) pion = 0; if( Keyboard::isKeyPressed( Keyboard::S ) ) pion1 = 1; if( !Keyboard::isKeyPressed( Keyboard::S ) ) pion1 = 0; if( Keyboard::isKeyPressed( Keyboard::A ) ) poziom = 1; if( !Keyboard::isKeyPressed( Keyboard::A ) ) poziom = 0; if( Keyboard::isKeyPressed( Keyboard::D ) ) poziom1 = 1; if( !Keyboard::isKeyPressed( Keyboard::D ) ) poziom1 = 0; if(( Keyboard::isKeyPressed( Keyboard::D ) && Keyboard::isKeyPressed( Keyboard::A ) ) || ( Keyboard::isKeyPressed( Keyboard::W ) && Keyboard::isKeyPressed( Keyboard::S ) ) || ( poziom1 == 0 && poziom == 0 && pion == 0 && pion1 == 0 ) ) player.stoj(); else player.idz( poziom1 - poziom, pion1 - pion );[ / cpp ] A oto player.idz [ cpp ] void Gracz::stoj() { status = STOP; frame = 0; } void Gracz::idz( int AD, int WS ) { status = GO; sprite.move( speed * AD, speed * WS ); } [ / cpp ] [ cpp ] void Gracz::update( Vector2f mysz ) { Vector2f norm = mysz - sprite.getPosition(); float rot = atan2( norm.y, norm.x ); rot = rot * 180.f / pi; rot += 90; sprite.setRotation( rot ); if( status == STOP ) return; if( anim_clock.getElapsedTime() > seconds( 0.09f ) ) { if( frame < 7 ) frame++; else frame = 0; sprite.setTextureRect( IntRect( frame * 64, 0, 64, 64 ) ); anim_clock.restart(); } }[ cpp ]
|
|
DejaVu |
» 2017-11-14 12:47:54 Sterowanie lepiej robić na bezpośrednim dostępie do klawiatury, a nie na zdarzeniach. poczytaj o klasie sf::Keyboard. |
|
Saran |
» 2017-11-14 21:41:51 Zgadza się, daj to sterowanie na zewnątrz pętli eventów. |
|
« 1 » |