在游戏中,多个物体(动画)同时运动(播放)应该怎么实现?

发布于 2022-08-31 09:11:18 字数 175 浏览 23 评论 0

我现在有两个思路,一个是维护一个类似时间轴的结构,然后每次循环取出当前要更新的地方,进行更新。
另一个思路是用多线程,一个一个抢占了渲染。
我觉得前一种更好,但不知道最佳实践是什么。

另外题外话,如果自己造轮子写2D游戏的话,总是不了解各种细节的最佳实践,有没有什么好的资料呢?

谢谢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

尸血腥色 2022-09-07 09:11:18

单线程的话一般是有一个worldController和一个worldRenderer,前者负责统一更新游戏数据,后者负责统一渲染游戏画面,这样是同步更新和渲染的。多线程的话是异步的。前者可以随时掌握游戏全局状态,另外可以保持各个实体时间进程同步,这对于物理效果尤其重要,但是不能充分利用多核CPU。后者则相反。孰优孰劣还要根据具体游戏确定吧。
我又想到是不是可以这样设计呢。worldController是单线程的,renderer做成多线程的(可以每个线程独有一个renderer,也可以有一个worldRenderer,负责在适当的时候通知每个线程可以进行渲染了,或者说触发式渲染,似乎是后一种方案更好,因为做到渲染与数据更新的同步(由于是多线程,可能说成伪同步更好),一方面可以保证在必要时有更新就有渲染,另一方面一方面避免了renderer在游戏数据尚未更新情况下空跑。

骄傲 2022-09-07 09:11:18

没有最佳实践,游戏的架构有非常多种,有基于渲染树,有基于组件,有基于对象池。有兴趣可以去看看《游戏引擎架构》这本书,虽然是介绍3D的,但是2D也适用。

另外可以看看 http://gameprogrammingpatterns.com/ 这本 online book 。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文