0

我遇到了一点麻烦,我想知道你是否可以帮我解决它。

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

但是无论出于何种原因,尽管在方法中调用了 idleAnimation 方法,但它并未在组内运行__init__。如果我稍后在循环中调用它:

while StillLooping:
    player.idleAimation()
    window.fill((0, 0, 0))
    playerGroup.update()
    playerGroup.draw(window)
    pygame.display.flip()

它运行但不运行。我不知道为什么。任何想法都会非常感谢!

4

2 回答 2

1

idleAnimation()方法不会被该playerGroup.update()方法神奇地调用。我真的不明白为什么你认为它应该是......

的文档Group.update 说这会调用update()每个精灵的方法,因此update()如果您希望每个循环都调用它,则应将该方法重命名为。

于 2013-07-14T12:22:28.123 回答
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()您的初始化程序,因为它会在您的循环中运行。

于 2013-07-14T14:29:11.003 回答