2017-04-24 179 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使这个更加健壮和可扩展,值得学习。