2012-04-26 9 views
0

私は自分のパイゲームのシンプルなスコアシステムを作成しました。それはゲームを一時停止しています。私はそれが時間のためだと知っている。休憩するが、私はそれを整理する方法はありません。Pygameシンプルスコアシステム

スタートが真である間、スコアシステムは、100にコードごとに5秒です:

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

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

はあなた

ありがとう
+1

'x == True'は決してあなたが望むものではありません。ちょうど '始める間に:' – habnabit

+0

[pygame.time](http://www.pygame.org/docs/ref/time.html)に興味があるかもしれません。 – James

答えて

2

正しく理解すれば、while True: score += 100ループはプログラム全体をブロックしたくありませんか?

あなたは別々の機能 に追加スコアを移動することによって、それを解決してAPSchedulerあなたは機能ごとに5秒を実行するためのスレッドの作成になりますAPScheduler http://packages.python.org/APScheduler/intervalschedule.htmlのintervalfunction

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 

これを使用する必要があります。

機能を変更するには、機能を変更する必要があるかもしれませんが、少なくとも始めるべきです:)。

+0

理想的なソリューションのように見えますが、このエラーが発生します。スケジューラ ImportError:スケジューラという名前のモジュールはありません。 – ErHunt

+0

あなたはそれをインストールする必要があります。 'pip install apscheduler' – DMan

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秒以上は何があるのか​​?)が、一般的な考え方であることができます。これは一般に「デルタタイム」ゲームタイマの実装と呼ばれます。