Я пытаюсь создать простую игру SFML, в которой вы управляете автомобилем, и вам нужно уклоняться от предметов, которые падают с верхней части экрана. Когда я запускаю свою программу, он становится невосприимчивым, но когда я его закрываю, на экране нет сообщений об ошибках.SFML C++ Dodge Game Unresponsive
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();
}
}
}
};
Вы прошли через код с помощью отладчика? При очень наивном первом взгляде это выглядит так: 'while (GameOn == true)' никогда не бывает правдой, но я подозреваю, что вы легко найдете проблему, перешагнув код, пока не доберетесь до вас. – George