【问题标题】:Pygame does not display the last changesPygame 不显示最后的更改
【发布时间】:2015-10-27 23:27:12
【问题描述】:

所以,我有了我的人形,我可以以回合制方式在我的地图上导航。我单击该图形,然后单击一个新位置,该图形移动到该位置(立即,没有运行动画等)。现在,如果图形遇到了一些东西,我希望它停止并让 pygame 显示一个窗口。当窗口打开时,我希望背景中的所有内容都停止,以便在那段时间我不能移动我的身影(例如)。我希望单击按钮后窗口消失。我就是这样做的:

    if char.colided:
        DISPLAYSURFACE.blit(window,(5*TILESIZE,8*TILESIZE,200,400))
        but_OK=Button('OK', 12*TILESIZE, 9*TILESIZE, 80, 40)
        but_OK.draw()
        a=False
        while not a:
            pygame.event.clear()
            for event in pygame.event.get():
                if event.type == pygame.MOUSEBUTTONDOWN:
                    if but_OK.check_click(event.pos):
                        a=True
        char.colided=False

一切正常,但问题是,一旦我做出使我的图形与一个对象或另一个图形发生碰撞的动作,pygame 就不再显示它了。这意味着我进入了 while 循环,但在屏幕上我的图形没有移动并且窗口没有弹出。在我“隐藏”(例如最小化)pygame 窗口之后,更改首先出现。我能想到的避免这种情况的唯一方法是在 while 循环中再次显示所有内容,但这是很多东西,所以我想尽可能避免这种情况。如有必要,我也可以发送其余代码,但我现在不想这样做,因为这些代码将近 400 行,我真的不知道在这种情况下哪个部分是重要的

【问题讨论】:

    标签: python pygame


    【解决方案1】:

    无论您的游戏处于什么状态,您都需要在事件循环中处理 3 件事。一个处理事件,两个更新状态,三个绘制和翻转屏幕。

    在您的对话框状态事件循环中,您主要处理事件。您正在更新对话框的“状态”(不分配更新,因为它是一个游戏本身暂停的对话框)。但是,您不是在绘制或更新屏幕。在进入循环之前你确实画了一些东西,这意味着只有第一帧会有对话框,但你从来没有调用翻转屏幕。所以你甚至没有得到那一帧。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多