在Python中暂停并重新启动游戏(opengl)
问题描述:
我对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*,但它不能正常工作
任何帮助?!
答
看到我的处理暂停更完整地评论的链接,但你也可以只重构你的绘制代码的东西线沿线的:
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使这个更加健壮和可扩展,值得学习。
这是一个很好的教程,帮助我与这个http://gamedevgeek.com/tutorials/managing-game-states-in-c/。基本上,你将所有的游戏逻辑包装到一个GameState对象中,然后你的“游戏”成为一个游戏状态处理程序。当你想暂停时,你的GameState会将控制权交给一个MenuState,导致GameState停止更新。 – Will
我的答案中的代码意味着要成为一个模板,您将不得不将所有当前的更新和绘图代码移动到名为'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