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();
}
}
}
};
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