首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何管理SFML渲染,“信号”的方式?

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

Stack Overflow用户
提问于 2011-03-14 19:40:14
回答 1查看 776关注 0票数 0

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

代码语言:javascript
复制
while (App->IsOpened())
{
    //Do the stuff
    App->Clear();
    App->Display();
}

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

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

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

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-14 20:01:59

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

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

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

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

所以它看起来像这样:

代码语言:javascript
复制
while (App->IsOpened())
{
    Game->Update();
    App->Clear();
    Game->Render();
    App->Display();
}

附言:很抱歉我的英语不好,希望你能理解。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5298059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档