Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
窗口未在SFML中打开 基本上,我在C++和SFML中制作了一个乒乓克隆,我使用的是一些我几乎不懂的类。问题是,我首先要打开窗户,用黑色把它清理干净。这些文件编译时没有错误,运行时也没有错误,但窗口就是不出现_C++_Sfml - Fatal编程技术网

窗口未在SFML中打开 基本上,我在C++和SFML中制作了一个乒乓克隆,我使用的是一些我几乎不懂的类。问题是,我首先要打开窗户,用黑色把它清理干净。这些文件编译时没有错误,运行时也没有错误,但窗口就是不出现

窗口未在SFML中打开 基本上,我在C++和SFML中制作了一个乒乓克隆,我使用的是一些我几乎不懂的类。问题是,我首先要打开窗户,用黑色把它清理干净。这些文件编译时没有错误,运行时也没有错误,但窗口就是不出现,c++,sfml,C++,Sfml,我相信这和构造器有关,但我也不确定。我查看了所有其他问题,看看是否有人回答了我的问题,但没有人给我答案。忽略其他头文件,它们目前没有做任何事情 game.hpp class Game { public: Game(); void run(); public: sf::RenderWindow window; private: void processEvents(); void update(); void draw(); }; pong.cpp #include &l

我相信这和构造器有关,但我也不确定。我查看了所有其他问题,看看是否有人回答了我的问题,但没有人给我答案。忽略其他头文件,它们目前没有做任何事情

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;
}
窗口应该是打开的并且是黑色的,但是当程序运行时,它运行良好,但是窗口不会弹出。我已经看了几个小时了,在discord服务器上询问了一些人,但没有找到答案。

在游戏构造函数中,您正在创建一个本地窗口对象,当构造函数结束时,该对象会立即被销毁

与此相反:

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);
}

为了使用非默认初始化来初始化窗口数据成员。

我在一本书中看到了这一点,但它不起作用。如果没有窗口,我该怎么办。setFrameRate60;?我会在最后放一个分号吗不需要分号什么的,只要写下Game::Game:windowsf::videomode640480,Game Window,sf::Style::Default{}@RyanFarrell如果这对你有好处的话,也许你能接受这个答案?是的,我以前打算这么做,但不得不等待计时器。