我遇到了一些麻烦,我想知道你是否可以帮我修复它。
所以我制作了一个精灵并创建了一个空闲动画方法,我正在__init__
方法中调用它。
class Player(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.attributes = "blah"
self.idleAnimation()
def idleAnimation(self):
self.animationCode = "Works normally I've checked it"
player = Player()
playerGroup = pygame.sprite.Group()
playerGroup.add(player)
window = pygame.display.set_mode(yaddi-yadda)
while StillLooping:
window.fill((0, 0, 0))
playerGroup.update()
playerGroup.draw(window)
pygame.display.flip()
但无论出于何种原因,尽管在__init__
方法中调用了idleAnimation方法,但它仍未在组内运行。如果我稍后在循环中调用它:
while StillLooping:
player.idleAimation()
window.fill((0, 0, 0))
playerGroup.update()
playerGroup.draw(window)
pygame.display.flip()
它运行但不是。我无法理解为什么。任何想法都会非常感谢!
答案 0 :(得分:1)
idleAnimation()
方法不会神奇地调用playerGroup.update()
方法。我真的不明白为什么你认为它应该......
Group.update
的文档说这会调用每个精灵的update()
方法,因此如果您希望每个循环都调用该方法,则应将该方法重命名为update()
。
答案 1 :(得分:1)
当您实例化对象时,__init__
方法仅被调用一次。因此,在创建对象时会调用idleAnimation()
方法,就是这样。
您论坛的update()
方法只会调用精灵的update
方法,因此您需要按照建议重命名idleAnimation()
,或添加update()
方法调用它,这应该更灵活:
class Player(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.attributes = "blah"
self.idleAnimation() # You can probably get rid of this line
def idleAnimation(self):
self.animationCode = "Works normally I've checked it"
def update(self):
'''Will be called on each iteration of the main loop'''
self.idleAnimation()
您可能无需在初始化程序中调用idleAnimation()
,因为它会在您的循环中运行。