我正在处理一个叫做敌人的类的多个实例。我从游戏类的主方法调用它们,所以看起来是这样的。你知道吗
class Game(object):
def main(self, screen):
if condition is true:
Enemy(arguments)
elif condition is true:
Enemy(arguments)
class Enemy(pygame.sprite.Sprite):
def __init__(self, location, kind, number, *groups):
self.kind = kind
self.number = str(number)
# Stuff that determines where and which kind
每当敌人被召唤时,它就会产生一个敌人。你知道吗
稍后我有命中检测,需要知道哪个敌人被击中,所以它更新字典。但是要为敌人(以及其他类似的类)更新字典,我需要访问敌人的每个实例,并知道我正在访问哪个实例,因为每个实例在任何给定的时间都有不同的位置变量,而且它们都在单独地、正确地更新。如果你需要更多的信息,我很乐意提供。你知道吗
编辑:现在来看,我确实认为我简化了太多,所以我要转储一段字典更新代码,以便您可以查看它。注意,我是一个相对的新手,在编码和更多的类,所以这可能不是所有做得很好。你知道吗
class Game(object):
def main(self, screen):
while 1:
self.hashMap[(topLeftx / acc, topLefty / acc)] = ["Enemy " + Enemy.number]
topLeftx = Enemy.rect[0]
topLefty = Enemy.rect[1]
width = Enemy.rect[2]
height = Enemy.rect[3]
acc = 10
if width > acc:
x = math.floor(width / acc)
for a in range(1, int(x) + 1):
if ((topLeftx / acc) + a, (topLefty / acc)) in self.hashMap.keys():
self.hashMap[((topLeftx / acc) + a, (topLefty / acc))].append("Enemy" + Enemy.number)
else:
self.hashMap[((topLeftx / acc) + a, (topLefty / acc))] = ["Enemy" + Enemy.number]
if height > acc:
y = math.floor(height / acc)
for b in range(1, int(y) + 1):
if ((topLeftx / acc), (topLefty / acc) + b) in self.hashMap.keys():
self.hashMap[((topLeftx / acc), (topLefty / acc) + b)].append("Enemy" + Enemy.number)
else:
self.hashMap[((topLeftx / acc), (topLefty / acc) + b)] = ["Enemy" + Enemy.number]
这是我试图为敌人做的,但失败了
AttributeError: type object 'Enemy' has no attribute 'number'
即使它是在敌人的定义。“号码”是我做身份证的方式,但没有成功。有什么好办法能让这一切顺利吗?你知道吗
重新编辑-我忘了main方法中有一个循环。所有的命中检测也应该是主要的方法。我没有将对敌人的呼叫存储为实例,我应该如何准确地实现它?谢谢你的帮助!你知道吗
您的错误是,您的代码应该引用一个
Enemy
实例(它确实没有任何number
属性),而不是使用Enemy.…
(它引用了Enemy
类)。你知道吗类似地,在
Game.main()
方法中,应该对创建的Enemy
实例进行处理(比如将它们保存在某个地方):它们是具有number
属性的对象,因此它们是处理代码应该处理的对象。你知道吗假设您正在遍历一个
Enemy
对象列表。当您检测到一个“命中”时,您应该立即拥有被命中的Enemy
的实例。如果您已经足够仔细地实现了这个算法,那么就不需要任何其他方法来识别特定的Enemy
实例。你知道吗“区分类实例”的最简单方法是使用id(例如,每个敌人都有一个唯一的id,可以将其与其他敌人区分开来)。 因为字典(dict)中有这些敌人,所以他们的id可以是dict键。你知道吗
它可能会帮助我了解你的命中检测如何工作,以获得更完整的答案。你知道吗
希望这有帮助。你知道吗
相关问题 更多 >
编程相关推荐