据我所知,传统的游戏设计使用多态和虚拟功能来更新游戏对象的状态。换句话说,在游戏中的每个对象上以规则的间隔(例如,每帧)调用同一组虚拟函数。
最近,我发现,还有另一个- 事件驱动的消息传递系统可用于更新游戏对象的状态。在这里,对象通常不会按帧进行更新。取而代之的是,构建了高效的事件消息传递系统,并且仅在收到有效事件消息之后才更新游戏对象。
事件驱动的游戏体系结构在Mike McShaffry编写的《Game Coding Complete》中有很好的描述。
我可以在以下问题上寻求帮助:
- 两种方法的优缺点是什么?
- 哪里比另一个更好?
- 事件驱动游戏设计在所有领域都通用且更好吗?因此,即使在可移植的平台中,也建议使用它吗?
- 哪一个更有效,哪个更难开发?
要澄清的是,我的问题不是要从游戏设计中完全消除多态性。我只是希望了解使用事件驱动消息传递与常规(每帧)调用虚拟函数以更新游戏状态的区别和好处。
示例: 这个问题在这里引起了一些争议,因此让我为您提供示例:根据MVC,游戏引擎分为三个主要部分:
- 应用层(硬件和操作系统通信)
- 游戏逻辑
- 游戏画面
在赛车游戏中,“游戏视图”负责以最快的速度(至少30fps)渲染屏幕。Game View也会侦听玩家的输入。现在发生这种情况:
- 玩家将燃油踏板踩到80%
- GameView构造一条消息“将Car 2油门踏板压到80%”,并将其发送给Game Logic。
- Game Logic会获取消息,评估,计算新车的位置和行为,并为GameView创建以下消息:“绘制2踩下燃油2的燃油踏板”,“ 2声音加速”,“ 2坐标X,Y” .. 。
- GameView接收消息并进行相应处理
update
它们即可)。由于种种原因,您可以使用第二个消息。