0

私のゲームでは、プレイヤーは小惑星を避けることができ、小惑星が画面の下部に当たると破壊され、スコアが10増加しますが、プレイヤーが特定のスコアに達した後、小惑星の速度を上げたいのですが、これを行うたびに私が使用しているコードでは、小惑星に問題が発生し、スコアが急速に増加し始めます。誰か助けてもらえますか?

Asteroid クラス、コードは update メソッドにあります。

class Asteroid(games.Sprite):
global lives
global score
global inventory
"""
A asteroid which falls through space.
"""

image = games.load_image("asteroid_med.bmp")
speed = 2

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


def update(self):
    """ Check if bottom edge has reached screen bottom. """
    if self.bottom>games.screen.height:
        self.destroy()
        score.value+=10

    if score.value == 100:
        Asteroid.speed+= 1

必要に応じてスコア変数

score = games.Text(value = 0, size = 25, color = color.green,
               top = 5, right = games.screen.width - 10)
games.screen.add(score)
4

1 に答える 1

1
if score.value == 100:
    Asteroid.speed += 1

スコアが100であるフレームごとに、小惑星の速度に 1 を追加します。これは、ゲームが 60 fps で実行されている場合、1 秒後に小惑星の速度が 60 増加することを意味します。これが物事が「グリッチ」し始める時であると仮定するのは正しいですか?

これを修正するには、プレーヤーのスコアが 100 に達したときにのみ速度を上げ、それが反応的に行われるようにする必要があります。

if self.bottom > games.screen.height:
    self.destroy()
    score.value += 10

    # Check if the score has reached 100, and increase speeds as necessary
    if score.value == 100:
        Asteroid.speed += 1

Asteroid.speedすべての小惑星の速度を設定するかどうかは、コードからは不明です。そうでない場合は、速度を上げる必要があるという事実を他のすべてのアクティブな小惑星にブロードキャストする方法を考え出す必要があります。

于 2013-10-21T16:33:59.923 に答える