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

[SFML] Chodzenie WSAD

Ostatnio zmodyfikowano 2017-11-14 21:41
Autor Wiadomość
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
C/C++
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 ]
P-166865
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.
P-166871
Saran
» 2017-11-14 21:41:51
Zgadza się, daj to sterowanie na zewnątrz pętli eventów.
P-166891
« 1 »
  Strona 1 z 1