Python 加上额外的「;“框架”;在游戏中
我刚刚开始使用Pygame,到目前为止,我所有的程序都是这样运行的伪代码:Python 加上额外的「;“框架”;在游戏中,python,pygame,Python,Pygame,我刚刚开始使用Pygame,到目前为止,我所有的程序都是这样运行的伪代码: initialize game while true: for each event: if event is close button: close() elif event is mouse button down: event_handler() logic() draw() update_displa
initialize game
while true:
for each event:
if event is close button:
close()
elif event is mouse button down:
event_handler()
logic()
draw()
update_display()
这对于一个“框架”来说效果很好。然而,若我想要一个标题屏幕(比如说,点击开始)、一个主游戏(具有正常的事件处理)和一个屏幕上的游戏(具有按键开始),该怎么办。我决定这样实施:
initialize game
frame = 0
while true:
for each event:
if event is close button:
close()
if frame == 0:
if event is mouse button down:
frame = 1
elif frame == 1:
if event is mouse button down:
event_handler()
elif frame == 2:
if event is key button down:
frame = 0
if frame == 0:
frame_zero_logic()
frame_zero_draw()
elif frame == 1:
frame_one_logic()
frame_one_draw()
elif frame == 2:
frame_two_logic()
frame_two_draw()
update_display()
然而,我觉得这并不是最好的实现。在Pygame中实现“多帧”的首选方式是什么?对于下面的部分,我建议您只说
frame.logic()
frame.draw()
并确保框架对象提供了逻辑
和绘制
方法
至于上半部分,您确定当前的帧实际上是什么,它有点棘手。我可能会在每一帧上设置一个布尔标志is_finished
,允许循环确定是否可以继续到下一帧。所以我要替换代码
if frame == 0:
if event is mouse button down:
frame = 1
elif frame == 1:
if event is mouse button down:
event_handler()
elif frame == 2:
if event is key button down:
frame = 0
以某种方式
if frame.is_finished:
frame = successor(frame)
然后,您必须找到一种合理的方法来确定每个帧的后续帧。这应该发生在框架的实现之外,这样框架就不需要知道它的继承者
至于鼠标/按键事件:我会将它们传递到当前帧对象中来处理它们。对象可能会在处理它们之后将其is_finished
标志设置为True
。对于下部,我建议您只说
frame.logic()
frame.draw()
并确保框架对象提供了逻辑
和绘制
方法
至于上半部分,您确定当前的帧实际上是什么,它有点棘手。我可能会在每一帧上设置一个布尔标志is_finished
,允许循环确定是否可以继续到下一帧。所以我要替换代码
if frame == 0:
if event is mouse button down:
frame = 1
elif frame == 1:
if event is mouse button down:
event_handler()
elif frame == 2:
if event is key button down:
frame = 0
以某种方式
if frame.is_finished:
frame = successor(frame)
然后,您必须找到一种合理的方法来确定每个帧的后续帧。这应该发生在框架的实现之外,这样框架就不需要知道它的继承者
至于鼠标/按键事件:我会将它们传递到当前帧对象中来处理它们。对象可能会在处理后将其is_finished
标志设置为True