请教pyglet精灵动画显示问题,下面的代码在2个精灵没有相遇时显示正常行走动画正常,但是当相遇后动画效果就消失了,只能显示2个精灵相遇时一帧的静态图。请教在不生成新的精灵的前提下,代码应该怎么修改才能产生2个精灵相遇后,分别自动从行走动画切换到攻击动画并停在相遇坐标互相攻击的效果。

import pyglet


window=pyglet.window.Window(800,600)

back=pyglet.resource.image('zc.png')


class BlueSoldier():

def __init__(self,x,y):

self.x=x

self.y=y

self.animation1=pyglet.resource.animation('walk.gif')

self.animation2=pyglet.resource.animation('attack.gif')

self.sprite=pyglet.sprite.Sprite(self.animation1,self.x,self.y) #默认精灵图


def display(self):

self.sprite.draw()


def attack(self):

self.sprite=pyglet.sprite.Sprite(self.animation2,self.sprite.x,self.y) #相遇后的精灵图

self.sprite.draw()


class RedSoldier():

def __init__(self,x,y):

self.x=x

self.y=y

self.animation1=pyglet.resource.animation('walk.gif')

self.animation2=pyglet.resource.animation('attack.gif')

self.sprite=pyglet.sprite.Sprite(self.animation1,self.x,self.y)


def display(self):

self.sprite.draw()


def attack(self):

self.sprite=pyglet.sprite.Sprite(self.animation2,self.sprite.x,self.y)

self.sprite.draw()


def update(dd):

pass


pyglet.clock.schedule_interval(update,1/60)


blue=BlueSoldier(200,200)

red=RedSoldier(600,200)

@window.event

def on_draw():

back.blit(0,0)

if blue.sprite.x!=red.sprite.x-32: #判断当2个对象不相遇时分别移动

blue.sprite.x +=1

red.sprite.x -=1

blue.display()

red.display()

else: #判断当2个对象相遇后调用攻击的精灵图并显示

blue.attack()

red.attack()


if __name__ == '__main__':

pyglet.app.run()

我运行下给你看看

好的,感谢你,测试过好像是2个精灵相遇碰撞事件触发时候给2个sprite精灵重新传gif图片,如果在on_draw()里面传的话,就会出现这种情况,如果在on_draw外面就不会出现这种不会动的情况,但是问题是2个精灵碰撞事件触发时候的sprite.x坐标传不到函数外

是不是有其他的可以在on_draw()函数外能检测到2个精灵碰撞相遇事件的方法

建议完成后给出结果 谢谢


尚未解决,是否是pyglet用的人太少了