在游戏中,多个物体(动画)同时运动(播放)应该怎么实现?
我现在有两个思路,一个是维护一个类似时间轴的结构,然后每次循环取出当前要更新的地方,进行更新。
另一个思路是用多线程,一个一个抢占了渲染。
我觉得前一种更好,但不知道最佳实践是什么。
另外题外话,如果自己造轮子写2D游戏的话,总是不了解各种细节的最佳实践,有没有什么好的资料呢?
谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
单线程的话一般是有一个worldController和一个worldRenderer,前者负责统一更新游戏数据,后者负责统一渲染游戏画面,这样是同步更新和渲染的。多线程的话是异步的。前者可以随时掌握游戏全局状态,另外可以保持各个实体时间进程同步,这对于物理效果尤其重要,但是不能充分利用多核CPU。后者则相反。孰优孰劣还要根据具体游戏确定吧。
我又想到是不是可以这样设计呢。worldController是单线程的,renderer做成多线程的(可以每个线程独有一个renderer,也可以有一个worldRenderer,负责在适当的时候通知每个线程可以进行渲染了,或者说触发式渲染,似乎是后一种方案更好,因为做到渲染与数据更新的同步(由于是多线程,可能说成伪同步更好),一方面可以保证在必要时有更新就有渲染,另一方面一方面避免了renderer在游戏数据尚未更新情况下空跑。
没有最佳实践,游戏的架构有非常多种,有基于渲染树,有基于组件,有基于对象池。有兴趣可以去看看《游戏引擎架构》这本书,虽然是介绍3D的,但是2D也适用。
另外可以看看 http://gameprogrammingpatterns.com/ 这本 online book 。