2017-04-24 83 views
0

我對python和OpenGL仍然很陌生。我寫了一個簡短的代碼來移動汽車穿過z軸,here是我完全寫的代碼,如果需要在Python中暫停並重新啓動遊戲(opengl)

我想要做的是當用戶點擊「p」時暫停遊戲,重新啓動時「r」和退出程序時,「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 :我嘗試了Pygame自由,但它不能正常工作

任何幫助?!

+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使這個更加健壯和可擴展,值得學習。