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

[SFML 2.0] Ruch myszki wpływa na ruch postaci za pomocą klawiszy.

Ostatnio zmodyfikowano 2013-08-13 23:51
Autor Wiadomość
Revo
Temat założony przez niniejszego użytkownika
[SFML 2.0] Ruch myszki wpływa na ruch postaci za pomocą klawiszy.
» 2013-08-13 17:01:26
Witam. Jestem zmuszony zwrócić się do Panów i Pań z prośbą o pomoc, bo nie rozumiem w ogóle w czym tkwi problem.

Najlepiej pokazać to na filmiku : Problem

Dlaczego tak się dzieję ?? Przy poruszaniu muszka postać porusza się szybciej, niż przy braku ruchu myszki.

Fragment odpowiadający za ruch postaci :

C/C++
sf::Event event;
while( G_MAPS.window.pollEvent( event ) )
{
    if( event.type == sf::Event::Closed )
    {
        G_MAPS.window.close();
    }
    //if (event.type == sf::Event::MouseMoved)
    //{
   
    // }
    if( sf::Mouse::isButtonPressed( sf::Mouse::Left ) )
    {
       
    }
    if( sf::Keyboard::isKeyPressed( sf::Keyboard::Up ) )
    {
        G_MAPS.ChangePlayerPos( 0, 5 );
    }
    if( sf::Keyboard::isKeyPressed( sf::Keyboard::Down ) )
    {
        G_MAPS.ChangePlayerPos( 0, - 5 );
    }
    if( sf::Keyboard::isKeyPressed( sf::Keyboard::Left ) )
    {
        G_MAPS.ChangePlayerPos( 5, 0 );
    }
    if( sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) )
    {
        G_MAPS.ChangePlayerPos( - 5, 0 );
    }
}
P-90167
MrPoxipol
» 2013-08-13 17:14:53
W tutorialu SFML była informacja, że do poruszania jakimś obiektem nie używa się zdarzenia isKeyPressed tylko samego klawisza z eventu. Dokładniej Ci nie powiem, bo piszę z telefonu. Ogólnie jest to bardzo często popełniany błąd. Co do głównego problemu to nic nam nie wiadomo o tej klasie/strukturze przechowywującej okno.
P-90173
pekfos
» 2013-08-13 19:15:18
Dzieje się tak, ponieważ sprawdzasz klawisze w pętli komunikatów. Gdy poruszasz myszką, komunikatów jest więcej i pętla wykonuje więcej obiegów.
P-90190
Revo
Temat założony przez niniejszego użytkownika
» 2013-08-13 19:16:16
Korzystałem z tutka na oficjalnej stronie producenta, a nie z tego na niniejszej stronie :P
Dziękuję za pomoc i gdyby ktoś miał taki sam problem to rozwiązaniem jest zamiast :

C/C++
if( sf::Keyboard::isKeyPressed( sf::Keyboard::Up ) )
{
   
}

jest :

C/C++
if( event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Up )
{
   
}

P-90191
pekfos
» 2013-08-13 19:21:24
To nie rozwiązanie, tylko ominięcie problemu ;)
P-90192
Revo
Temat założony przez niniejszego użytkownika
» 2013-08-13 23:46:21
A jak powinno wyglądać rozwiązanie problemu ??
P-90234
killjoy
» 2013-08-13 23:51:51
Na przykład, kod poruszania usunąć z pętli komunikatów i dać go do pętli głównej, najlepiej w jakimś timerze.
P-90235
« 1 »
  Strona 1 z 1