gpt4 book ai didi

c++ - SFML - sf::RenderWindow,分割文件

转载 作者:太空宇宙 更新时间:2023-11-04 16:06:23 25 4
gpt4 key购买 nike

所以这可能是一件微不足道的事情,但我真的需要知道为什么它会以这种方式发生以及我该如何改变它。

所以我今天开始学习 SFML,我正在阅读 SFML 游戏开发电子书,看到非常有趣且编写得很好的代码。我学习了有关 SFML 的教程并开始学习语言,因为我了解它应该如何工作的一般概念。

所以我想记住新的关键字、构造函数、方法,但也让我的代码组织得井井有条 - 使用我所学的知识来保持代码的整洁和易于编辑、调试。

我的第一个代码是显示窗口,我以两种方式创建了相同的代码,通常将所有内容都放在主函数中并分开。事情是,只要我不关闭它,第一个窗口就会显示,第二个窗口显示不到一秒,程序正在关闭。

这可能是因为析构函数在我打开它后立即被调用,添加更多函数以保持对象忙碌是可行的方法,但好吧,我想了解它。这是我在学习目标编程时不太理解的最后一件事。对象的工作方式。在我创建它们之后,我将它们用于某些任务,但是当我完成后它们就会被删除,有时我又需要它们。我只是想了解它是如何工作的,并找到真正简单快速的修复/想法,让它在我想要的时候一直工作。

代码:

第一个程序:

#include <SFML/Graphics.hpp>

int main()
{
sf::RenderWindow mainWindow(sf::VideoMode(800,600),"Main Window");

while(mainWindow.isOpen())
{
sf::Event openEvent;
while(mainWindow.pollEvent(openEvent))
{
switch(openEvent.type)
{
case sf::Event::Closed:
mainWindow.close();
break;
}
mainWindow.clear();
mainWindow.display();
}
}
}

第二个程序:

main.cpp

#include <SFML/Graphics.hpp>
#include "Game.cpp"

int main()
{
Game game;
game.run();
}

游戏.cpp

#include "Game.h"

Game::Game()
{
sf::RenderWindow mainWindow(sf::VideoMode(800,600),"Main Window");
}

void Game::run()
{
while(mainWindow.isOpen())
{
sf::Event openEvent;
while(mainWindow.pollEvent(openEvent))
{
switch(openEvent.type)
{
case sf::Event::Closed:
mainWindow.close();
break;
}
}
mainWindow.clear();
mainWindow.display();
}
}

游戏.h

class Game
{
public:
Game();
void run();

private:
sf::RenderWindow mainWindow;

};

最佳答案

Game::Game()
{
sf::RenderWindow mainWindow(sf::VideoMode(800,600),"Main Window");
}

在此处的构造函数中,您正在创建一个新的 RenderWindow 对象,一旦构造函数退出,该对象将立即被销毁。您要做的是初始化 RenderWindow,它是您类(class)的成员。您可以通过以下两种方式之一完成此操作,即使用成员初始化列表中的 RenderWindow 构造函数:

Game::Game()
:mainWindow(sf::VideoMode(800,600),"Main Window")
{}

或者像下面这样在构造函数体中调用create函数:

Game::Game()
{
mainWindow.create(sf::VideoMode(800,600),"Main Window");
}

关于c++ - SFML - sf::RenderWindow,分割文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34624283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com