1综合计时器与多个计时器,每个对象的计时器

sam*_*amy 1 c# timer winforms

我有一个关于良好做法的问题.我正在做一个简单的游戏,我正在搞乱一些精灵.

我有一个精灵课.在该类中,有一个每隔几毫秒运行一次的计时器.

现在,我有一个List<Creatures>和"生物"的每个人,在它们中有一个Sprite对象来运行动画.所以这意味着每个生物都有一个同样的东西.

我决定更改它,并制作一个只在列表上迭代的计时器,并调用为每个"Creature"创建动画的函数.

什么是好习惯?

  1. 给每个"生物"一个自己的计时器.
  2. 在表单中创建一个"大"计时器,迭代列表,并调用从每个对象创建动画的函数.
  3. 一种不同的方式

Ben*_*igt 5

如果它们都以相同的间隔运行,那么一个大计时器肯定是要走的路.

即使它们以不同的间隔运行,一个大的计时器(用逻辑确定哪些子处理程序触发)通常仍然是最好的.

一些库将在内部添加此逻辑,并且仅从OS请求单个计时器.您还没有确切地说明您正在使用哪个计时器(.NET至少有四个),所以我建议您自己使用集中计时器.


Ed *_* S. 5

我有一个精灵课.在该类中,有一个每隔几毫秒运行一次的计时器.

不幸的是,它实际上并不存在.您受到(非高性能)系统时钟的分辨率的限制,该时钟约为15 ms.因此,如果您愿意,可以将间隔设置为1,但这不是您实际获得的间隔.

回到主题,对于游戏,一切都应该在同一个时钟上运行.对于每个刻度,你将有一个循环,它更新游戏的逻辑状态(位置和诸如此类),然后是显示(动画帧,blit到屏幕等).如果将它们放在不同的计时器上,您可能会遇到问题,因为在并行更新对象时协调对象的状态变得非常困难.

还要意识到,您需要对更新速率进行标准化,以确保事物不会更快或更慢地更新(取决于渲染帧所需的时间).您需要检查上次更新和新更新之间的增量并采取相应措施.