2

私の卓球ゲームでは、誰かが得点する (ボールが左または右に出る) たびに、ボールの位置が画面の中央にリセットされ、移動する前に 1 秒待機します。その 1 秒間に、小さなアニメーションが進行中です。

私の問題は次のとおりです。アニメーションの途中でゲームを一時停止すると、オブジェクトは更新されず、一時停止テキストのみが描画されますが、時間が進み続けます。十分な時間を待つと、アニメーションはちょうど停止しますゲームの一時停止を解除した後。これが私の言いたいことです。これはボールの更新です:

def update(self, dt):
        now = pygame.time.get_ticks() / 1000
        # if time elapsed since the ball got out >= BALL_WAIT_TIME
        if now - self._spawn_time >= BALL_WAIT_TIME:
            self.rect = self.calcnewpos(dt)
            self.handle_collision()
        # spawn animation
        else:
            step = 255 / (FPS * BALL_WAIT_TIME)
            value = int(self._frame * step)
            rgb = (value, value, value)
            self._draw_ball(rgb)
            self._frame += 1

http://pygame.org/docs/ref/time.html#pygame.time.get_ticksから:

pygame.time.get_ticks()

pygame.init() が呼び出されてからのミリ秒数を返します。pygame が初期化される前は、これは常に 0 です。

そのため、ゲームが一時停止している間は何も描画または更新されませんが、pygame.time.get_ticks() は からの経過時間を返しpygame.initます。どうすればこれを解決できますか? わかりにくいかもしれませんが、必要に応じて残りのコードを投稿します。

4

1 に答える 1

2

なんらかのイベントが発生した時間を現在の時間から差し引いているように見えます。それがイベントからの経過時間を確認する方法である場合、ゲームが一時停止されていても問題ありません。イベントが発生してから 10 分間ゲームを一時停止した場合、イベントが発生してから常に 10 分経過しています。

そのことを念頭に置いて、ゲームがアクティブなときにのみ時間をカウントする方法が必要です。おそらく、ボールには、ボールが出てからの経過時間を示す属性があり、ゲームが一時停止されていない場合にのみそれを増やすことができます.

編集:次のようなもの:

class Ball:
    def spawn(self):
        self.sinceSpawn = 0

    def update(self, dt):
        if not gamePaused:
            self.sinceSpawn += dt
        if self.sinceSpawn >= BALL_WAIT_TIME:
            pass #Do something here
于 2013-09-30T10:35:15.023 に答える