2017-02-21 2 views
0

J'essaie de créer un jeu SFML simple où vous contrôlez une voiture et vous devez esquiver les objets qui tombent du haut de l'écran. Lorsque j'exécute mon programme, il ne répond plus, mais lorsque je le ferme, aucun message d'erreur ne s'affiche à l'écran.SFML C++ Dodge Jeu Ne répond pas

main.cpp:

#include <iostream> 
#include <SFML/Graphics.hpp> 
#include "Paddle.h" 
#include "Obstacle.h" 
using namespace sf; 
using namespace std; 

int main() 
{ 
RenderWindow gameDisplay(VideoMode(1336, 900), "Dodge"); 

bool GameOn = true; 

Texture player; 
if (!player.loadFromFile("SFML_game_car.png")) 
{ 

} 

Sprite playercar; 
playercar.setTexture(player); 
playercar.setPosition(200,700); 
playercar.setRotation(270); 

Texture obstacle1; 
if (!obstacle1.loadFromFile("obstacle.jpg")) 
{ 
    //error 
} 

Sprite firstwall; 
firstwall.setTexture(obstacle1); 


Obstacle1 obstacle1object; 
obstacle1object.obstacle1_spawn(firstwall, GameOn, gameDisplay); 



while (gameDisplay.isOpen()) 
{ 
    Event evnt; 
    while (gameDisplay.pollEvent(evnt)) 
    { 
     switch (evnt.type) 
     { 
     case Event::Closed: 
      gameDisplay.close(); 
     case Event::KeyPressed: 
      if (Keyboard::isKeyPressed(Keyboard::Q)) 
       gameDisplay.close(); 

     } 
    } 


    while (GameOn == true) 
    { 
     if (Keyboard::isKeyPressed(Keyboard::Right)) 
     { 
      Paddle paddlerightobject; 
      paddlerightobject.paddle_move_right(playercar); 
     } 

     if (Keyboard::isKeyPressed(Keyboard::Left)) 
     { 
      Paddle paddleleftobject; 
      paddleleftobject.paddle_move_left(playercar); 
     } 



     gameDisplay.clear(); 
     gameDisplay.draw(playercar); 
     gameDisplay.draw(firstwall); 
     gameDisplay.display(); 

    } 


} 

return 0; 
} 

Paddle.h

#include <SFML/Graphics.hpp> 
#include <iostream> 
using namespace sf; 
using namespace std; 

#pragma once 

class Paddle 
    { 
    public: 
    void paddle_move_right(Sprite &playercar) 
{ 
    if (playercar.getPosition().x < 1150) 
     playercar.move(0.3f, 0.0f); 
} 

void paddle_move_left(Sprite &playercar) 
{ 
    if (playercar.getPosition().x > 100) 
     playercar.move(-0.3f, 0.0f); 
    } 
}; 

Obstacle.h

#include <iostream> 
#include <SFML/Graphics.hpp> 
#include <cstdlib> 
#include <stdlib.h> 
#include <ctime> 
using namespace sf; 
using namespace std; 
int RandPosx; 
#pragma once 

class Obstacle1 
{ 
public: 
void obstacle1_spawn(Sprite &firstwall, bool &GameOn, RenderWindow &gameDisplay) 
{ 
    srand(time(0)); 
    RandPosx = (rand() % 300)+ 1; 
    cout << RandPosx << endl; 
    cout << firstwall.getPosition().y << endl; 
    firstwall.setPosition(300, 100); 

    while (firstwall.getPosition().y < 1000) 
    { 
     firstwall.move(0.0f, 0.5f); 
     if (firstwall.getPosition().y > 1000) 
     { 
      GameOn = false; 
      gameDisplay.close(); 
     } 
    } 



    } 
}; 
+1

Avez-vous parcouru le code à l'aide d'un débogueur? À un premier coup d'oeil très naïf, il semble que 'while (GameOn == true)' n'est jamais vrai, mais je suppose que vous pourriez facilement trouver le problème en enjambant le code jusqu'à ce que vous atteigniez le blocage. – George

Répondre

0

l'application ne sera jamais entrer while (gameDisplay.pollEvent(evnt), puisque ce sera ignorée lorsque le jeu commence , et puisqu'il n'y a rien à l'intérieur while (GameOn == true) qui définit GameOn à false, l'application est effectivement bloquée à l'intérieur de cette boucle. Ainsi, aucun événement ne peut être interrogé, provoquant l'absence de réponse.

+0

ok merci je vais essayer de le réparer :) –

+0

@JosephH Je recommande que vous essayez ce qui traverse votre programme en mode debug comme George a suggéré dans son commentaire! –