1

作成中のゲームで別の問題が発生しています。スポナー クラスによって新しい小惑星が作成されるたびに Asteroids スプライトがランダム化されるようにしたいのですが、「デフォルト以外の引数がデフォルト引数に続く」というエラーが発生し続けます。実際にランダム化された画像はスポナー内に保存され、Asteroid クラスにインポートされます。画像リストはグローバル変数です。

images = [games.load_image("asteroid_small.bmp"),
      games.load_image("asteroid_med.bmp"),
      games.load_image("asteroid_big.bmp")]

 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)

そして、これは、ランダム化された画像が保存される小惑星クラスの一部です

def __init__(self, x, y = 10,image):
    """ Initialize a asteroid object. """
    super(Asteroid, self).__init__(image = image,
                                x = x, y = y,
                                dy = Asteroid.speed)
4

1 に答える 1

1

あなたの問題は、小惑星をインスタンス化する方法ではなく、それを定義する方法です:

def __init__(self, x, y = 10,image):

見てみるとimage、デフォルトの引数を持つ y の後の最後です。Python では、そのようなことはできません。次の 2 つのオプションがあります。

def __init__(self, x, y = 10, image = None):
    # default the argument to some sentinel value
    # Test for sentinel and the reassign if not matched.
    image = image if image else random.choice(images)

また

def __init__(self, x, image, y = 10):
    # re-order your arguments.
    # Also note that image, x, y might be a better order 
    # (@see comment by Micael0x2a)
于 2013-10-08T14:54:46.313 に答える