Graphics 在一次调用中设置大量对象的动画

Graphics 在一次调用中设置大量对象的动画,graphics,2d,Graphics,2d,我正在编写一些代码来设置对象的动画。。目前我有这样的东西(伪代码) 如您所见,对于创建的每个精灵,它都有其动画功能,可以更改其x和y位置,并且fps计算很简单。我想要实现的是这样的目标: instances = [] fps = 30 def animate(): for each object in instances: # NEED AN 'IF TIME TO ANIMATE?' PART HERE. object.x = blah

我正在编写一些代码来设置对象的动画。。目前我有这样的东西(伪代码)

如您所见,对于创建的每个精灵,它都有其动画功能,可以更改其x和y位置,并且fps计算很简单。我想要实现的是这样的目标:

instances = []
fps = 30

def animate():
    for each object in instances:
        # NEED AN 'IF TIME TO ANIMATE?' PART HERE.
        object.x = blah
        object.y = blah
    time.sleep(1 / fps)
    animate()

class Sprite:
    x = 0
    y = 0
    def animate(fps = 5):
        instances.append(self)

mario = new Sprite()
mario.animate(fps=10)

bird = new Sprite()
bird.animate(fps=5)

这段伪代码与第一段伪代码的区别在于,第二段伪代码有一个动画调用来为每个对象设置动画。我只是不确定你将如何准确地计算出何时为每个对象设置动画。如果每个对象/精灵都有相同的FPS,则(当前)唯一可行的方法是将属性添加到
精灵类中,以保存上次设置动画的时间。然后,您可以很容易地计算是否该更改帧

if CurrentTime - mario.lastAnimTime > rate then
   mario.lastAnimTime = CurrentTime
   // Change frame...

谢谢这是难以置信的简单,是我以前一直在想的事情。出于某种原因,我最终试图计算经过了多少帧,然后根据这些帧而不是经过的时间来计算出来。以不同的速率制作动画有点不寻常,可能在视觉上不太吸引人。奥托,这种做法有什么具体原因吗?
if CurrentTime - mario.lastAnimTime > rate then
   mario.lastAnimTime = CurrentTime
   // Change frame...