2017-04-24 18 views
0

私はまだPythonとOpenGLの新機能です。私はz軸に車を移動するための短いコードを書いてhereは必要ならば私の完全に書かれたコードですPython(opengl)でのゲームの一時停止と再開

私がしたいのは、 「Q」は...辞職は完璧に動作しますが、私はどちらも再起動もなく、すべての私の試練にもかかわらず、ゲームを一時停止することができ、ここで私はすべてのケースを考慮することが書い一部である場合、プログラムを終了します

def keyboard (key,x,y): 
    if key == b"q" : 
    sys.exit(0) 

    if key == b"r" : 
    restart_program() 

    if key == b"p": 
    pause() 

PS :私は、パイゲの自由を試みたが、期待通りに正しく動作しない

何か助けてください!

+0

このhttp://gamedevgeek.com/tutorials/managing-game-states-in-c/で私を助けた良いチュートリアルがあります。基本的には、すべてのゲームロジックをGameStateオブジェクトにラップすると、「ゲーム」はゲームの状態ハンドラになります。一時停止したい場合、GameStateはMenuStateに制御を渡し、GameStateの更新を停止させます。 – Will

+0

私の答えのコードはテンプレートであるため、現在の更新と描画のコードを 'UpdateAllTheThings' *という関数に移動しなければなりません。*あなたは動く部分をすべてsclaes '' glTranslatef(-2.5 + mov、-0.5,0.5 * 2.5) '=>' glTranslatef(-2.5+(mov * time_elapsed)、--0.5,0.5 * 2.5) ')。このようにして0を渡すと、動きが防止され、最後の更新から時間の経過とともにスケールされる値(ミリ秒など)が渡されます。 – Will

答えて

0

ポーズを扱うのより完全な方法のための私のコメントにリンクを参照してください、しかし、あなたはまた、単にの線に沿って何かに描画コードをリファクタリングできます。すべての可動部分を更新しつつ、

その後
elapsed_time = 0 
paused = False 

def update(): 
    start_time = time.time() 

    if key == b"r" : 
    paused = False 

    if key == b"p": 
    paused = True 

    if paused: 
    elapsed_time = time.time() - start_time 
    else: 
    elapsed_time = 0 

    UpdateAllTheThings(elapsed_time) 

while True: 
    update() 

あなたのシステムでは、各移動を経過した時間だけスケールする必要があります。経過時間をパラメータとする別のupdate()関数を使用すると、0を渡すことで一時停止をシミュレートできます。 system of game statesはこれをはるかに堅牢で拡張性のあるものにしています。学習する価値があります。

関連する問題