0

私のプログラムでは、'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)
4

1 に答える 1