c++ - SFML 中没有打开窗口
问题描述
基本上,我正在用 c++ 和 sfml 制作一个 pong 克隆,并且我正在使用我对它知之甚少的类。问题是,我首先尝试打开窗口并将其清除为黑色。文件编译没有错误,运行没有错误,但窗口只是没有出现。
我相信它与构造函数有关,但同样,我不确定。我查看了所有其他问题,看看是否有任何人回答了我的问题,但没有一个人给了我答案。忽略其他头文件,它们目前没有做任何事情。
游戏.hpp
class Game
{
public:
Game();
void run();
public:
sf::RenderWindow window;
private:
void processEvents();
void update();
void draw();
};
乒乓球
#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;
}
窗口本来是要打开的,是黑色的,但是当程序运行时,它运行良好,但窗口没有弹出。我已经看了几个小时了,在不和谐的服务器上问了一些人,但找不到答案。
解决方案
在您的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
使用非默认初始化来初始化数据成员。
推荐阅读
- node.js - 由于 fetch 如何下载存档?节点
- spring-boot - 找不到测试类 - Spring Boot
- typescript - 无法从打字稿文件导入导出的类
- python - 函数调用不执行其定义
- python - 如何避免三元运算符赋值中的重复?
- python - 'str' 和 'int' 的实例之间不支持 '>'
- ui-automation - 桌面应用程序显示“Chrome 旧版窗口” - 无法自动化
- django - 在 Django 中使用电子邮件作为登录名
- unity3d - 即使在自定义深度蒙版着色器 UNITY 中的 z-test lequal 之后,某些模型也是可见的。
- xml - 将 .mat 注释文件转换为 XML 文件