Pyglet手动更新对象

时间:2018-06-14 15:15:43

标签: python pyglet

我有一个小的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方法外部手动调用更新函数似乎无法达到我的目的。

有什么建议吗?

0 个答案:

没有答案