如何管理SFML渲染;“信号”;路? 我开发了一个C++编写的Snake小游戏,使用了SFML 2D库。问题是:为了渲染窗口并打印其中的任何内容,必须通过 while (App->IsOpened()) { //Do the stuff App->Clear(); App->Display(); }

如何管理SFML渲染;“信号”;路? 我开发了一个C++编写的Snake小游戏,使用了SFML 2D库。问题是:为了渲染窗口并打印其中的任何内容,必须通过 while (App->IsOpened()) { //Do the stuff App->Clear(); App->Display(); },c++,signals,signals-slots,sfml,C++,Signals,Signals Slots,Sfml,但是,我希望以更通用的方式构建我的程序,这将使我能够初始化窗口,然后从while语句外部向它发送信号,例如其中的“renderect”或“ClearTheWindow”。它将允许我使用我的渲染类实例作为一个动态库,例如,使游戏代码和渲染代码成为两种不同且独立的东西 关于如何在我的SFML项目中实施这样的信号系统,您有什么建议吗 PS:我听说过libsigc++,但不知道如何实现它 谢谢大家! 没有必要发出这样的信号。所有的事情都应该在while循环(主循环)中处理,每个帧都应该被清除,并作为一个

但是,我希望以更通用的方式构建我的程序,这将使我能够初始化窗口,然后从while语句外部向它发送信号,例如其中的“renderect”或“ClearTheWindow”。它将允许我使用我的渲染类实例作为一个动态库,例如,使游戏代码和渲染代码成为两种不同且独立的东西

关于如何在我的SFML项目中实施这样的信号系统,您有什么建议吗

PS:我听说过libsigc++,但不知道如何实现它


谢谢大家!

没有必要发出这样的信号。所有的事情都应该在while循环(主循环)中处理,每个帧都应该被清除,并作为一个整体单独绘制,而不是在区域中绘制,因此SFML使用OpenGL

将游戏逻辑从主循环中分离出来的最明显的方法是使游戏面向对象。 当然,它只会在单独的文件中分离逻辑单元,但它们会在同一个循环中“一起”运行。我认为这是理想的(但至少是可以接受的)行为

因此,您将有一个Game类,它将有一个Update()方法。这就是游戏逻辑发生的地方,事件被处理(最好在调用之前查询事件,并作为参数传递给Update()),所有必须显示的内容的状态都被更新。 您应该在主循环的每次迭代中调用它

该类还有一个Render()方法,可以根据需要绘制所有内容

所以看起来是这样的:

while (App->IsOpened())
{
    Game->Update();
    App->Clear();
    Game->Render();
    App->Display();
}

注:对不起,我的英语不好,希望你能理解。

没有必要发出这样的信号。所有的事情都应该在while循环(主循环)中处理,每个帧都应该被清除,并作为一个整体单独绘制,而不是在区域中绘制,因此SFML使用OpenGL

将游戏逻辑从主循环中分离出来的最明显的方法是使游戏面向对象。 当然,它只会在单独的文件中分离逻辑单元,但它们会在同一个循环中“一起”运行。我认为这是理想的(但至少是可以接受的)行为

因此,您将有一个Game类,它将有一个Update()方法。这就是游戏逻辑发生的地方,事件被处理(最好在调用之前查询事件,并作为参数传递给Update()),所有必须显示的内容的状态都被更新。 您应该在主循环的每次迭代中调用它

该类还有一个Render()方法,可以根据需要绘制所有内容

所以看起来是这样的:

while (App->IsOpened())
{
    Game->Update();
    App->Clear();
    Game->Render();
    App->Display();
}

注:对不起,我的英语不好,希望你能理解。

谢谢你的帮助,但实际上,我真的需要用信号系统来实现它。我的游戏类必须与许多图形库兼容,将它们作为动态库加载。所以,我需要我的游戏类能够以一种通用的方式调用Update、clear等,而无需费心时间。。。这样,我可以很容易地实现Qt或GtkMM。我可以制作一些类似Current=game->Init()的东西;当前->更新();当前->清除();哦,那么你真的应该使用libsigc++了。很抱歉,我无法帮助您使用此库,因为我对它不太熟悉。谢谢您的帮助,但实际上,我确实需要用信号系统来实现它。我的游戏类必须与许多图形库兼容,将它们作为动态库加载。所以,我需要我的游戏类能够以一种通用的方式调用Update、clear等,而无需费心时间。。。这样,我可以很容易地实现Qt或GtkMM。我可以制作一些类似Current=game->Init()的东西;当前->更新();当前->清除();哦,那么你真的应该使用libsigc++了。对不起,我不能帮你处理这个图书馆,因为我对它不太熟悉。