动画精灵和碰撞检测之统计时间,,


  统计时间

  与孩子一起学编程-python教程

  到目前为止,我们一直在使用time.delay()来控制动画运行的快慢,不过这不是最好的办法,这是因为使用time.delay()时,你并不真正知道每个循环需要多长时间,循环中的代码要花一些时间来运行(这是一个未知时间),然后延迟也要花费一些(这是一个已知时间),所以这个时间中有一部分是书籍的,但有一部是未知的。

  如果我们想知道循环多长时间运行一次,就需要知道每个循环的总时间,这应当是代码运行时间+延迟时间。要计算动画的时间,使用毫秒或千分之一秒会很方便。这的缩写是ms,所以25毫秒就是25ms.

  在我们的例子中,假设代码时间是15ms,这说明,while循环中的代码运行需要15ms,这不包括time.delay()。我们已经知道延迟的时间,因为这里使用time.delay(20)把延迟设置为20ms.所以循环的总时间是20ms+15ms=35ms.由于1秒就是1000ms,如果每个循环需要35ms,可以得到1000ms/35ms=28.57.这说明每秒大鸡有29个循环,在计算机图形学中,每个动画步叫做一帧,游戏程序员讨论图形更新的快慢时都会提到帧速率(每秒帧数,fps),在我们的例子中,帧速率大约是29fps.

  问题在于,我们并不能真正控制这个公式中的“代码时间”部分。如果增加或删除代码,这个时间就会改变,即使是相同的代码,如果动画精灵个数不同(例如,随着游戏对象的出现和消失,动画精灵个数会变化),绘制这些精灵所花费的时间也会变化,可能不是15ms,代码时间可能变成10ms或20ms.如果有一种更便于预测的方法来控制帧速率就好了,好在Pygame的time模块为我们提供了这样的工具人:一个名为Clock的类。

评论关闭