0

pygame 用の簡単なスコア システムを作成しました。しかし、それはゲームを一時停止しています。time.sleep が原因であることはわかっていますが、それを整理する方法はわかりません。

start が true の間、スコア システムは 5 秒ごとに +100 になります。コードは次のとおりです。

while start == True:
   time.sleep(5)
   score = score + 100 

インデント付きの完全なコード: http://pastebin.com/QLd3YTdJ 行のコード: 156-158

ありがとうございました

4

2 に答える 2

3

時間が経過するまでゲームを停止させるを使用する代わりに、sleep経過した秒数で内部タイマーをカウントアップします。5 秒になったら、スコアを増やしてからタイマーをリセットします。

このようなもの:

scoreIncrementTimer = 0
lastFrameTicks = pygame.time.get_ticks()
while start == True:
    thisFrameTicks = pygame.time.get_ticks()
    ticksSinceLastFrame = thisFrameTicks - lastFrameTicks
    lastFrameTicks = thisFrameTicks

    scoreIncrementTimer = scoreIncrementTimer + ticksSinceLastFrame
    if scoreIncrementTimer > 5000:
        score = score + 100
        scoreIncrementTimer = 0

これは簡単に改善できます (フレーム レートが非常に低く、フレーム間に 5 秒以上ある場合はどうでしょうか?) が、一般的な考え方です。これは、一般に「デルタ タイム」ゲーム タイマーの実装と呼ばれます。

于 2012-04-26T20:44:05.873 に答える
2

私があなたを正しく理解しているなら、あなたはwhile True: score += 100ループがあなたのプログラム全体をブロックすることを望まないのですか?

別の関数にスコアを追加して移動し、APSchedulerhttp://packages.python.org/APScheduler/intervalschedule.htmlのinterval関数を使用して解決する必要があります

from apscheduler.scheduler import Scheduler

# Start the scheduler
sched = Scheduler()
sched.start()

# Schedule job_function to be called every 5 seconds
@sched.interval_schedule(seconds=5)
def incr_score():
    score += 100

これにより、APSchedulerは、5秒ごとに関数を実行するためのスレッドを作成します。

関数を機能させるには、関数にいくつかの変更を加える必要があるかもしれませんが、少なくとも開始する必要があります:)。

于 2012-04-26T20:48:13.007 に答える