gpt4 book ai didi

python - 在 Pygame 中添加额外的 "frames"

转载 作者:太空宇宙 更新时间:2023-11-03 18:44:46 24 4
gpt4 key购买 nike

我刚刚开始使用 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_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()

并确保您的框架对象提供logicdraw方法。

至于上半部分,您可以在其中确定当前的框架实际上是什么,这有点棘手。我可能会在每个帧上设置一个 bool 标志 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

关于python - 在 Pygame 中添加额外的 "frames",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19763754/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com