如何管理SFML渲染,“信号”方式?

时间:2011-03-14 11:40:14

标签: c++ signals signals-slots sfml

我正在开发一个用C ++编写并使用SFML 2D库的小蛇游戏。问题是:为了渲染窗口,并在其中打印任何内容,您必须通过

进行渲染
while (App->IsOpened())
{
    //Do the stuff
    App->Clear();
    App->Display();
}

但是,我想以更通用的方式构建我的程序,这将使我能够只启动窗口,然后向其发送信号,例如“RenderARect”或“ClearTheWindow”,来自while声明之外。它会让我使用我的渲染类实例作为动态库例如,制作游戏代码,渲染代码两个不同且独立的东西...

您对如何在我的SFML程序中实现这样的信号系统有什么建议吗?

PS:我已经习惯了libsigc ++,但不知道如何实现它......

谢谢!

1 个答案:

答案 0 :(得分:5)

无需发送此类信号。应该在while循环(主循环)中处理所有内容,并且每个帧都应该被清除,并且作为一个整体而不是在区域中绘制,因此SFML使用OpenGL。

将游戏逻辑与主循环分开的最明显方法是制作游戏OOP。 当然,它将它分离到单独的逻辑单元,在单独的文件中,但它们将在同一循环中“一起”运行。我认为这是期望的(但至少是可接受的)行为。

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

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

所以它看起来像这样:

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

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