我有一个小的Pyglet脚本,可以动画一些简单的红框:
import pyglet
xsize, ysize = 500, 500
window = pyglet.window.Window(xsize,ysize)
pyglet.resource.path = ["./imgs"]
pyglet.resource.reindex()
red = pyglet.resource.image("red.png")
b = pyglet.graphics.Batch()
class RedSquare():
def __init__(self,img,x=100,y=100,velocity_x=1, velocity_y=1):
self.sprite = pyglet.sprite.Sprite(img=img,x=x,y=y,batch=b)
self.velocity_x, self.velocity_y = velocity_x, velocity_y
def update(self,dt):
self.sprite.x += self.velocity_x*dt
self.sprite.y += self.velocity_y*dt
self.checkBoundaries()
def checkBoundaries(self):
if self.sprite.x < 0:
self.sprite.x = 500
if self.sprite.x > 500:
self.sprite.x = 0
if self.sprite.y < 0:
self.sprite.y = 500
if self.sprite.y > 500:
self.sprite.y = 0
squares = []
squares.append(RedSquare(red, velocity_x=-200))
squares.append(RedSquare(red,x=150,y=150, velocity_x=100))
squares.append(RedSquare(red,x=150,y=150, velocity_x=100, velocity_y=-50))
def update(dt):
for s in squares:
s.update(dt)
pyglet.clock.schedule_interval(update, 1/120.0)
@window.event
def on_key_press(symbol,modifiers):
print "key %s modifiers %s" % (symbol, modifiers)
@window.event
def on_draw():
window.clear()
b.draw()
if __name__ == '__main__':
pyglet.app.run()
对于我的用例,方块的属性将由外部函数更新。所以我需要能够从时钟外调用各种实例的 update 方法,并且仍然重新绘制这些方法。
例如:
if(someLogic)
squares[0].update() # This triggering the square to be re-drawn at the new coordinates
但是,从schedule_interval方法外部手动调用更新函数似乎无法达到我的目的。
有什么建议吗?