在我的程序中,我的“missilepack”对象被误认为是小行星对象并返回错误“Missilepack 对象没有属性“handle_caught”,我不明白为什么,修复此错误的任何帮助都会很棒。编辑:如果这有助于有人帮助我,这枚导弹似乎被误认为是小行星。
class MissilePack(games.Sprite):
speed = 1.7
image = games.load_image('MissilePack.bmp')
global inventory
def __init__(self, x,y = 10):
""" Initialize a missilepack object. """
super(MissilePack, self).__init__(image = MissilePack.image,
x = x, y = y,
dy = MissilePack.speed)
def update(self):
""" Check if bottom edge has reached screen bottom. """
if self.bottom>games.screen.height:
self.destroy()
def handle_caughtpack(self):
inventory.append('missile')
self.destroy.()
发生错误的部分在“asteroid.handlecaught() 位”中
def check_collison(self):
""" Check if catch pizzas. """
global lives
for asteroid in self.overlapping_sprites:
asteroid.handle_caught()
if lives.value <=0:
self.ship_destroy()
def check_pack(self):
for missilepack in self.overlapping_sprites:
missilepack.handle_caughtpack()
这是我的 Asteroid 类中的 handle_caught() 方法:
def handle_caught(self):
if lives.value>0:
lives.value-=1
self.destroy_asteroid()
if lives.value <= 0:
self.destroy_asteroid()
self.end_game()
这是生成于导弹包和小行星的生成器的一部分
def check_drop(self):
""" Decrease countdown or drop asteroid and reset countdown. """
if self.time_til_drop > 0:
self.time_til_drop -= 0.7
else:
asteroid_size = random.choice(images)
new_asteroid = Asteroid(x = self.x,image = asteroid_size)
games.screen.add(new_asteroid)
# makes it so the asteroid spawns slightly below the spawner
self.time_til_drop = int(new_asteroid.height * 1.3 / Asteroid.speed) + 1
def drop_missile(self):
"""Randomely drops a missile pack for the player to use"""
dropmissile = random.randrange(0, 100)
if dropmissile == 5:
missilepack = MissilePack(x = self.x)
games.screen.add(missilepack)