2017-04-14 96 views
0

我正在嘗試爲pygame中的角色繪製健康狀況欄。我收到一個錯誤,表示名稱'draw_shield_bar'未定義。我嘗試過player.draw_shield_bar,但仍然不起作用。有人可以幫助符號。下面我列出了調用函數的代碼,然後包括定義該函數的播放器類。幫助將不勝感激。如何在pygame中顯示角色的健康狀況

def draw(self): 
     # Game Loop - draw 

     whitehouse = pg.image.load("whiteHouseBG.png") 
     self.screen.blit(whitehouse,(0,0)) 

     self.all_sprites.draw(self.screen) 
     self.draw_text(str(self.score), 22, WHITE, WIDTH/2, 15) 


     draw_shield_bar(self.screen, 50, 50, player.shield) 
     # *after* drawing everything, flip the display 
     pg.display.flip() 

class Player(pg.sprite.Sprite): 
    def __init__(self, game): 
     pg.sprite.Sprite.__init__(self) 
     self.game = game 
     self.walking = False 
     self.jumping = False 
     self.current_frame = 0 
     self.last_update = 0 
     self.load_images() 
#me:girl standing 
     self.image = self.girl_standing[0] 
     self.rect = self.image.get_rect() 
     self.rect.center = (WIDTH/2, HEIGHT/2) 
     self.pos = vec(WIDTH/2, HEIGHT*3/4) 
     self.vel = vec(0, 0) 
     self.acc = vec(0, 0) 
     self.shield = 100 
     self.screen = pg.display.set_mode((WIDTH, HEIGHT)) 
     self.clock = pg.time.Clock() 

    def draw_shield_bar(surf, x, y, pct): 
     if pct < 0: 
      pct = 0 
     BAR_LENGTH = 200 
     BAR_HEIGHT = 20 
     fill = (pct/100 * BAR_LENGTH) 
     outline_rect = pg.Rect(x, y, BAR_LENGTH, BAR_HEIGHT) 
     fill_rect = pg.Rect(x, y, fill, BAR_HEIGHT) 
     pg.draw.rect(surf, GREEN, fill_rect) 
     pg.draw.rect(surf, WHITE, outline_rect, 2) 

回答

1

假設playerPlayer類的一個實例,使用player.draw_shield_bar是正確的。它失敗的原因可能是因爲你忘記使用self作爲draw_shield_bar方法的第一個參數。它應該是:

def draw_shield_bar(self, surf, x, y, pct): 

如果這不起作用。我希望看到完整的Traceback。

+0

添加自我時,我得到一個錯誤,說NameError:name'player'未定義。 –

+0

然後玩家不是類Player的實例。你需要在使用它之前初始化/初始化玩家,然後它會起作用。我不確定draw()方法是哪個類的成員,但在該類或方法中,您需要執行玩家初始化。 – JacobIRR

+2

它應該是'self.player.draw_shield_bar(self.screen,50,50)',因爲玩家是「遊戲」類的屬性(傳遞盾牌是不必要的)。我只知道,因爲我可以訪問完整的項目。 @MattMacy你真的需要學習如何創建[mcve](http://stackoverflow.com/help/mcve)。 – skrx

相關問題