Анимация множества объектов за один звонок - PullRequest
0 голосов
/ 28 июня 2011

Я работаю над некоторым кодом для анимации объектов .. на данный момент у меня есть что-то вроде этого (псевдокод) ..

class Sprite:
    x = 0
    y = 0
    def animate(fps=10):
        x += blah
        y += blah
        time.sleep(1000 / fps)
        self.animate()

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

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

Как вы можете видеть, для каждого созданного спрайта он имеет свою анимациюфункция, которая изменяет его координаты 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.

1 Ответ

1 голос
/ 28 июня 2011

Добавьте атрибут к вашему классу Sprite для хранения времени, когда он последний раз анимировался. Тогда вы можете легко рассчитать, пора ли менять кадр.

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