窗口未在SFML中打开

问题描述 投票:2回答:1

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

我相信它与构造函数有关,但同样,我不确定。我查看了所有其他问题,看看是否有任何答案我的问题,但没有一个给我一个答案。忽略其他头文件,他们目前没有做任何事情。

Gemhp

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个回答
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数据成员。

© www.soinside.com 2019 - 2024. All rights reserved.