Pygame不显示上次更改

时间:2015-10-26 20:37:48

标签: python pygame

所以,我有我的身材,我可以以转折的方式浏览我的地图。我点击图,然后在一个新位置,图形移动到那个位置(立即,没有运行动画等)。现在,如果图形遇到某种方式,我希望它停止并让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 :(得分:0)

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

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