我正在用pygame编写一个游戏,我有一个类,当你点击它时,它会显示每个建筑物的统计数据。类变量current_hud以None开头,但是当单击建筑物时,其值将成为建筑物对象,以便在调用绘制功能时,它仅绘制所选建筑物的hud。
问题是,我正在尝试在hud中创建我的“Text”类的实例,但是我得到了AttributeError:'NoneType'对象没有属性'name',因为self.current_hud不是一个对象,所以self.current_hud.name还不是一个属性。如何引用尚不存在的属性?是等待实例化hud类,直到点击建筑物真的唯一的选择?
class Hud:
current_hud = None
def __init__(self,x,y):
self.x = x
self.y = y
self.name_text = Text(x,y,str(self.current_hud.name), (0,0,0), 36)
def draw(self):
if Hud.current_hud == self:
self.square = pygame.Rect((self.x,self.y),(440,400))
pygame.draw.rect(screen,(255,255,255),self.square)
self.name_text.x = self.x + 10
self.name_text.y = self.y + 20
抱歉,如果这很复杂,但有点难以解释。如果您想运行完整代码,请查看完整代码:https://github.com/hailfire006/economy_game/blob/master/economy_game.py
答案 0 :(得分:1)
您可以将名称作为Hud类的选项,并在实例化Text类之前进行设置。
class Hud:
current_hud = None
def __init__(self,x,y,name):
self.x = x
self.y = y
self.current_hud.name = name
self.name_text = Text(x,y,str(self.current_hud.name), (0,0,0), 36)
def draw(self):
if Hud.current_hud == self:
self.square = pygame.Rect((self.x,self.y),(440,400))
pygame.draw.rect(screen,(255,255,255),self.square)
self.name_text.x = self.x + 10
self.name_text.y = self.y + 20
在完整的代码示例中,看起来当您实例化一个建筑物时,您有其名称,然后可以在实例化时将其传递给Hud。
class Building:
def __init__(self,posX,posY,color,name):
self.hud = Hud(0,0,name)