【问题标题】:Window not opening in SFMLSFML 中没有打开窗口
【发布时间】:2019-04-29 04:12:46
【问题描述】:

基本上,我正在使用 c++ 和 sfml 进行 pong 克隆,并且我正在使用我对此知之甚少的类。问题是,我首先尝试打开窗口并将其清除为黑色。文件编译没有错误,运行没有错误,但窗口只是没有出现。

我相信它与构造函数有关,但同样,我不确定。我查看了所有其他问题,看看是否有任何人回答了我的问题,但他们都没有给我答案。忽略其他头文件,他们现在什么都不做。

游戏.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;
}

窗口本来是要打开的,是黑色的,但是当程序运行时,它运行良好,但窗口没有弹出。我已经看了几个小时了,在不和谐的服务器上问了一些人,但找不到答案。

【问题讨论】:

    标签: c++ sfml


    【解决方案1】:

    在您的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 数据成员。

    【讨论】:

    • 我在我正在阅读的一本书中看到了这一点,但它不起作用。如果没有window.setFrameRate(60);,我该怎么办?我可以在行尾放一个分号吗
    • 不需要分号什么的,直接写Game::Game() : window(sf::VideoMode(640, 480), "Game Window", sf::Style::Default){}
    • @RyanFarrell 如果这对你有好处,你可以接受这个答案吗?
    • 是的,我之前打算这样做,但必须等待计时器。
    猜你喜欢
    • 2018-10-16
    • 1970-01-01
    • 2018-01-21
    • 2010-10-16
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    • 2020-10-20
    • 2014-02-12
    相关资源
    最近更新 更多