Итак, я создаю простую игру Pong с использованием c ++ и графической библиотеки SFML в Ubuntu 19.04, но когда я запускаю свою программу, кажется, что она работает нормально, примерно через 5 секунд, я получаю предупреждение о том, что моя программа не отвечаети выбор подождать или принудительно выйти из приложения.Когда я нажимаю «ждать», предупреждение уходит еще на 5 секунд, но возвращается.Как я могу предотвратить это или в моем коде что-то происходит?
- Редактировать, мне нужно, чтобы это был ввод в реальном времени, иначе игра использует задержку повторения ключа.
- Редактировать, Обнаружено pollEvent не должно быть условием для цикла while.Так что я положил его в основной цикл, это исправило это!
#include <iostream>
#include <SFML/Graphics.hpp>
using namespace std;
// init global variables
int screenX = 1920, screenY = 1080; // Screen size
int paddleWidth = 30, paddleHeight = 200; // Paddle size
int orbWidth = 26, orbHeight = 26; // Orb size
float objectLocations [6] = // This is an array
{
/*paddleL_X_G*/ 0, /*paddleL_Y_G*/ 0,
/*paddleR_X_G*/ 0, /*paddleR_Y_G*/ 0,
/*orbL_X_G*/ 0, /*orbL_Y_G*/ 0
};
float speed = 1;
// init window
sf::RenderWindow window(sf::VideoMode(screenX, screenY), "SFML Tests!"); // Init window
sf::Event event;
// Defines all objects to be drawn on the screen
class defineObjects
{
public:
void leftPaddle(int paddleL_X, int paddleL_Y) // Define the leftPaddle
{
sf::RectangleShape paddleL(sf::Vector2f(paddleWidth,paddleHeight));
paddleL.setFillColor(sf::Color::White);
paddleL.setPosition(paddleL_X,paddleL_Y);
window.draw(paddleL);
}
void rightPaddle(int paddleR_X, int paddleR_Y) // Define the rightPaddle
{
sf::RectangleShape paddleR(sf::Vector2f(paddleWidth,paddleHeight));
paddleR.setFillColor(sf::Color::White);
paddleR.setPosition(paddleR_X,paddleR_Y);
window.draw(paddleR);
}
void orb(int orbX, int orbY)
{
int orbSize = 26;
sf::RectangleShape orbShape(sf::Vector2f(orbSize,orbSize));
orbShape.setFillColor(sf::Color::Red);
orbShape.setPosition(orbX,orbY);
window.draw(orbShape);
}
};
class eventHandler
{
public:
void input()
{
if(sf::Keyboard::isKeyPressed(sf::Keyboard::Escape))
{
window.close();
}
if(sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
{
objectLocations[3] -= speed;
}
if(sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
{
objectLocations[3] += speed;
}
if(sf::Keyboard::isKeyPressed(sf::Keyboard::W))
{
objectLocations[1] -= speed;
}
if(sf::Keyboard::isKeyPressed(sf::Keyboard::S))
{
objectLocations[1] += speed;
}
}
};
int main()
{
// Get classes
defineObjects O;
eventHandler E;
// inital object positions
objectLocations[0] = paddleWidth; // paddleL_X
objectLocations[1] = screenY / 2 - (paddleHeight / 2); // paddleL_Y
objectLocations[2] = screenX - (paddleWidth * 2); // paddleR_X
objectLocations[3] = screenY / 2 - (paddleHeight / 2); // paddleR_Y
objectLocations[4] = screenX / 2 + (orbWidth / 2); // orbX
objectLocations[5] = screenY / 2 - (orbHeight / 2); // orbY
// Logic
while(window.isOpen()) // Main loop
{
// Clear display
window.clear();
// Input
E.input();
// Update object locations
O.leftPaddle(objectLocations[0],objectLocations[1]);
O.rightPaddle(objectLocations[2],objectLocations[3]);
O.orb(objectLocations[4],objectLocations[5]);
#include <iostream>
#include <SFML/Graphics.hpp>
using namespace std;
// init global variables
int screenX = 1920, screenY = 1080; // Screen size
int paddleWidth = 30, paddleHeight = 200; // Paddle size
int orbWidth = 26, orbHeight = 26; // Orb size
float objectLocations [6] = // This is an array
{
/*paddleL_X_G*/ 0, /*paddleL_Y_G*/ 0,
/*paddleR_X_G*/ 0, /*paddleR_Y_G*/ 0,
/*orbL_X_G*/ 0, /*orbL_Y_G*/ 0
};
float speed = 1;
// init window
sf::RenderWindow window(sf::VideoMode(screenX, screenY), "SFML Tests!"); // Init window
sf::Event event;
// Defines all objects to be drawn on the screen
class defineObjects
{
public:
void leftPaddle(int paddleL_X, int paddleL_Y) // Define the leftPaddle
{
sf::RectangleShape paddleL(sf::Vector2f(paddleWidth,paddleHeight));
paddleL.setFillColor(sf::Color::White);
paddleL.setPosition(paddleL_X,paddleL_Y);
window.draw(paddleL);
}
void rightPaddle(int paddleR_X, int paddleR_Y) // Define the rightPaddle
{
sf::RectangleShape paddleR(sf::Vector2f(paddleWidth,paddleHeight));
paddleR.setFillColor(sf::Color::White);
paddleR.setPosition(paddleR_X,paddleR_Y);
window.draw(paddleR);
}
void orb(int orbX, int orbY)
{
int orbSize = 26;
sf::RectangleShape orbShape(sf::Vector2f(orbSize,orbSize));
orbShape.setFillColor(sf::Color::Red);
orbShape.setPosition(orbX,orbY);
window.draw(orbShape);
}
};
class eventHandler
{
public:
void input()
{
if(sf::Keyboard::isKeyPressed(sf::Keyboard::Escape))
{
window.close();
}
if(sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
{
objectLocations[3] -= speed;
}
if(sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
{
objectLocations[3] += speed;
}
if(sf::Keyboard::isKeyPressed(sf::Keyboard::W))
{
objectLocations[1] -= speed;
}
if(sf::Keyboard::isKeyPressed(sf::Keyboard::S))
{
objectLocations[1] += speed;
}
}
};
int main()
{
// Get classes
defineObjects O;
eventHandler E;
// inital object positions
objectLocations[0] = paddleWidth; // paddleL_X
objectLocations[1] = screenY / 2 - (paddleHeight / 2); // paddleL_Y
objectLocations[2] = screenX - (paddleWidth * 2); // paddleR_X
objectLocations[3] = screenY / 2 - (paddleHeight / 2); // paddleR_Y
objectLocations[4] = screenX / 2 + (orbWidth / 2); // orbX
objectLocations[5] = screenY / 2 - (orbHeight / 2); // orbY
// Logic
while(window.isOpen()) // Main loop
{
// Clear display
window.clear();
// Input
E.input();
// Update object locations
O.leftPaddle(objectLocations[0],objectLocations[1]);
O.rightPaddle(objectLocations[2],objectLocations[3]);
O.orb(objectLocations[4],objectLocations[5]);
// Show display
window.display();
}
return 0;
}