Python 加上额外的「;“框架”;在游戏中

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

我刚刚开始使用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()
并确保框架对象提供了
逻辑
绘制
方法

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