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

[SFML] Przesuwanie sprite jak w prawdziwych grach 2D , jak takie coś zrobić ?

Ostatnio zmodyfikowano 2013-08-13 15:46
Autor Wiadomość
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
C/C++
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 .
P-90147
abdi
» 2013-08-13 15:08:55
&&
P-90148
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
C/C++
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 );
}
P-90149
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.
P-90151
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
P-90156
kampar
» 2013-08-13 15:41:29
użyj else if
P-90157
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 )
{


}
P-90159
domin568
Temat założony przez niniejszego użytkownika
» 2013-08-13 15:44:10
C/C++
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 )
P-90160
« 1 » 2
  Strona 1 z 2 Następna strona