2017-04-14 98 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

相关问题