Окно не открывается в SFML - PullRequest
2 голосов
/ 29 апреля 2019

По сути, я делаю клон pong в c ++ и sfml и использую классы, о которых у меня очень мало знаний.Проблема в том, что я в первую очередь пытаюсь открыть окно и очистить его в черном цвете.Файлы компилируются без ошибок и запускаются без ошибок, но окно просто не появляется.

Я верю, что это как-то связано с конструктором, но, опять же, я не уверен.Я посмотрел на все остальные вопросы, чтобы посмотреть, ответит ли кто-нибудь на мой вопрос, и ни один из них не дал мне ответа.Проигнорируйте другие заголовочные файлы, они в настоящий момент ничего не делают.

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

Это окно предназначеночтобы открыть и быть черным, но когда программа запущена, она работает нормально, но окно не появляется.Я смотрю на это уже несколько часов, спрашиваю некоторых людей на сервере разногласий, но не могу найти ответ.

1 Ответ

3 голосов
/ 29 апреля 2019

В вашем конструкторе 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 инициализацией не по умолчанию.

...