2013-07-14 37 views
0

我有一點麻煩,我想知道你是否可以幫我修復它。Sprite組中的Sprite方法Pygame

所以我做了一個精靈並創建了一個空閒的動畫方法,我打電話給__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() 

它運行,但不以其他方式運行。我無法弄清楚爲什麼。任何想法將非常感謝!

回答

1

idleAnimation()方法並不神奇地由playerGroup.update()方法調用。我真的不明白,爲什麼你認爲它應該是...

Group.update文檔說,這要求每一個角色的update()方法,所以你如果你希望它被稱爲每一個應該重命名的方法update()循環。

+0

我不認爲它應該是什麼神奇,而是因爲idleAnimation方法被調用,其中通常具有的自動運行的實例方法。但是,謝謝。 – LauraKellman

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()在你的初始化,因爲它將你的循環中運行之後。