首页 文章

Pygame不显示最后的更改

提问于
浏览
1

所以,我有我的身材,我可以以转折的方式在我的 Map 上导航 . 我点击图,然后在一个新位置,图形移动到那个位置(立即,没有运行动画等) . 现在,如果图形遇到某种方式,我希望它停止并让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行,我真的不知道哪个部分在这个环境中很重要

1 回答

  • 0

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

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

相关问题