精灵组中的精灵方法Pygame

时间:2013-07-14 11:54:18

标签: python methods pygame init

我遇到了一些麻烦,我想知道你是否可以帮我修复它。

所以我制作了一个精灵并创建了一个空闲动画方法,我正在__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()

它运行但不是。我无法理解为什么。任何想法都会非常感谢!

2 个答案:

答案 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(),因为它会在您的循环中运行。