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

SFML 2.0 Crash gry podczas wychodzenia z pętli

Ostatnio zmodyfikowano 2013-08-13 17:03
Autor Wiadomość
Ezuo
Temat założony przez niniejszego użytkownika
SFML 2.0 Crash gry podczas wychodzenia z pętli
» 2013-08-13 15:29:07
Witam,
Ostatnio postanowiłem napisać małą pseudo-pierkę, aby troche poćwiczyć :). Jej elementem jest prosta walka turowa: gracz musi trzymać spację, aby wprawić pocisk w ruch, a gdy ten dotrze do wroga zadaje mu obrażenia oraz podświetla go. Do tego momentu wszystko działa dobrze, lecz w chwili gdy program powinien przejść z pętli 1 (tura gracza) do pęli 2 (tura wroga) gra się zawiesza.

Oto kawałek kodu, o którym mówię:

C/C++
while( 1 ) //petla walki
{
    while( 1 ) //tura gracza
    {
        while( window.pollEvent( zdarzenie ) )
        {
            if( zdarzenie.type == sf::Event::Closed )
            {
                window.close();
                return 0;
            }
            if( sf::Keyboard::isKeyPressed( sf::Keyboard::Escape ) )
            {
                window.close();
                return 0;
            }
            if( sf::Keyboard::isKeyPressed( sf::Keyboard::Space ) ) // przemieszczanie kulki do wroga
                 KULA.move( 10, 3 );
           
        }
       
        sf::Vector2i posXYc( KULA.getGlobalBounds().width, KULA.getGlobalBounds().height ); //sprawdzenie czy kula koliduje z przeciwnikiem
        sf::Vector2i posSc( KULA.getGlobalBounds().left, KULA.getGlobalBounds().top );
       
        sf::Vector2i posXYd( wilk.getGlobalBounds().width, wilk.getGlobalBounds().height );
        sf::Vector2i posSd( wilk.getGlobalBounds().left, wilk.getGlobalBounds().top );
       
        window.draw( sala ); // tlo
       
        if( posSc.x >= posSd.x && posSc.x <= posSd.x + posXYd.x && posSc.y >= posSd.y && posSc.y <= posSd.y + posXYd.y )
        { // jesli kula koliduje z wrogiem
            window.draw( WILKczerwony ); // to podswietl go
            hp -= dmg; // i zadaj obrazenia
        }
        else // jesli nie koliduje
             window.draw( wilk ); // to wyswietl normalnie
       
        window.draw( mag );
        window.draw( KULA );
        window.display();
       
        if( hp != 20 ) // jesli zostaly zadane obrazenia to wyjdz z petli - TU CRASH!
             break;
       
    } // koniec tury gracza
   
    KULA.setPosition( 120, 220 ); // powrot kuli do gracza, aby w nastepnej turze mogl zaatakowac
   
    while( 1 )
    {
        // tura przeciwnika
        //...
    }
} // koniec walki
Dodam, że testowałem różne warunki przerwania pętli, lecz wszystkie z takim samym skutkiem.
Proszę o pomoc, jestem ciekawy gdzie leży mój błąd ;)
P-90155
killjoy
» 2013-08-13 16:27:20
Pętle komunikatów masz w pętli tury gracza, co powoduje nie obsługiwanie zdarzeń po wyjściu z niej i zawieszanie okienka.
P-90166
Ezuo
Temat założony przez niniejszego użytkownika
» 2013-08-13 17:03:30
Ok, dzięki za uświadomienie ;).
P-90168
« 1 »
  Strona 1 z 1