我刚开始练习,我应该完成一个基本的'愤怒的鸟'克隆。 我陷入了想要从列表中删除对象的位置。该列表包含游戏中使用的所有障碍(方框)。 因此,如果我想在它被击中后删除一个盒子,我必须做一个方法来做到这一点。无论我怎么做,这都会失败。
class spel(object):
def __init__(self):
self.obstacles = [obstacle(50,pos=(200,90)),]
#defines all other stuff of the game
class obstacle(object):
def __init__(self,size,pos):
#defines how it looks like
def break(self):
#methode that defines what happens when the obstacles gets destroyed
spel.obstacles.remove(self)
我得到的错误是:
AttributeError: 'NoneType' object has no attribute 'obstacles'
在最后一行之后。 请原谅我的noob级别,但关键是我不会再在这之后再编码,所以没有必要解释所有内容。
答案 0 :(得分:0)
您尚未实例化spel类。
如果你想使用这样的类,你必须实例化(创建一个实例)它。
在类之外:
app = spel() # app is an arbitrary name, could be anything
然后你会这样称呼它的方法:
app.obstacles.remove(self)
或者就你而言,来自另一个班级:
self.spel = spel()
self.spel.obstacles.remove(self)
答案 1 :(得分:0)
您已将'spel'定义为类,而不是对象。因此,您收到一个错误,因为Python正在尝试查找spel类的成员“障碍”,这在运行单个spel对象的__init__
方法之前不存在。
要将spel类的对象与您创建的每个障碍相关联,您可以尝试为障碍类的对象提供引用其关联的spel对象的数据成员。数据成员可以在障碍类'__init__
函数中实例化。像这样:
class obstacle(object):
def __init__(self, spel, size, pos):
self.spel = spel
#etc
def break(self):
self.spel.obstacles.remove(self)
希望有所帮助。
答案 2 :(得分:0)
我建议如下:
class spel(object):
obstacles = []
def __init__(self,size,pos):
spel.obstacles.append(obstacle(size,pos))
#defines all other stuff of the game
class obstacle(object):
def __init__(self,size,pos):
self.size = size
self.pos = pos
def brak(self):
#methode that defines what happens when the obstacles gets destroyed
spel.obstacles.remove(self)
from pprint import pprint
a = spel(50,(200,90))
pprint( spel.obstacles)
print
b = spel(5,(10,20))
pprint( spel.obstacles )
print
c = spel(3,None)
pprint( spel.obstacles )
print
spel.obstacles[0].brak()
pprint( spel.obstacles )
返回
[<__main__.obstacle object at 0x011E0A30>]
[<__main__.obstacle object at 0x011E0A30>,
<__main__.obstacle object at 0x011E0B30>]
[<__main__.obstacle object at 0x011E0A30>,
<__main__.obstacle object at 0x011E0B30>,
<__main__.obstacle object at 0x011E0AF0>]
[<__main__.obstacle object at 0x011E0B30>,
<__main__.obstacle object at 0x011E0AF0>]