基本上,我正在用c ++和sfml制作pong克隆,并且我使用的是类,对此我了解甚少。问题是,我首先要尝试打开窗口并将其清除为黑色。文件编译没有错误,并且运行没有错误,但是窗口没有出现。
我相信它与构造函数有关,但是同样,我不确定。我查看了所有其他问题,看是否有任何答案可以回答我,但没有一个给我答案。忽略其他头文件,目前它们什么也没做。
game.hpp
class Game
{
public:
Game();
void run();
public:
sf::RenderWindow window;
private:
void processEvents();
void update();
void draw();
};
pong.cpp
#include <iostream>
#include <SFML/Graphics.hpp>
#include "game.hpp"
#include "players.hpp"
#include "ball.hpp"
Game::Game() {
sf::RenderWindow window(sf::VideoMode(640, 480), "Game Window", sf::Style::Default);
window.setFramerateLimit(60);
}
void Game::processEvents() {
sf::Event event;
while (window.pollEvent(event)) {
if (event.type == sf::Event::Closed) {
window.close();
}
}
}
void Game::draw() {
window.clear(sf::Color::Black);
window.display();
}
void Game::run() {
while (window.isOpen()) {
processEvents();
draw();
}
}
int main(int argc, char const *argv[]) {
Game game;
game.run();
return 0;
}
该窗口旨在打开并呈黑色,但是运行该程序时,它可以正常运行,但该窗口不会弹出。我已经看了几个小时了,问了一些不和谐服务器上的人,但是找不到答案。
答案 0 :(得分:3)
在Game
构造函数中,您正在创建一个本地窗口对象,该对象将在构造函数结束时立即销毁。
代替此:
Game::Game() {
sf::RenderWindow window(sf::VideoMode(640, 480), "Game Window", sf::Style::Default);
window.setFramerateLimit(60);
}
执行以下操作:
Game::Game() : window(sf::VideoMode(640, 480), "Game Window", sf::Style::Default)
{
window.setFramerateLimit(60);
}
以便使用非默认初始化来初始化window
数据成员。