Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我的游戏在循环运行时崩溃一次(Pygame)_Python_Python 3.x_Pygame - Fatal编程技术网

Python 为什么我的游戏在循环运行时崩溃一次(Pygame)

Python 为什么我的游戏在循环运行时崩溃一次(Pygame),python,python-3.x,pygame,Python,Python 3.x,Pygame,我的代码: def shop_button(self): click = pygame.mouse.get_pressed() if click[0] == 1: self.open_shop() # draws shop self.inshop = True while self.inshop: pygame.time.delay(10) mousepos = pygame.mou

我的代码:

def shop_button(self):
    click = pygame.mouse.get_pressed()
    if click[0] == 1:
        self.open_shop()  # draws shop
        self.inshop = True
        while self.inshop:
            pygame.time.delay(10)
            mousepos = pygame.mouse.get_pos()
            if click[0] == 1 and b.mouse_on_button(mousepos[0], mousepos[1], b.escapex, b.escapex2, b.escapey, b.escapey2):
                self.inshop = False

然而,每当你点击shop按钮时,该功能就会运行,而self.inshop在类似这样的if语句中,游戏会立即停止响应并崩溃。这可能是一个非常简单的解决方案,因为我是pygame和python语言的新手。然而,尽管如此,我似乎无法在其他任何地方找到解决方案

游戏不会崩溃,也不会响应,因为主应用程序循环中有一个循环。内部循环没有事件处理和显示更新

def shop_按钮(自):
# [...]
而self.inshop:
pygame。时间。延迟(10)
mousepos=pygame.mouse.get_pos()
# [...]
从内部缓存读取由返回的位置。当事件由或处理时,缓存将更新。
这意味着,如果您在循环中检索位置,而不处理事件,则该位置不会反映当前鼠标位置,而是持续保持相同的位置,即在循环之前调用
pygame.event.get()
时的位置。
此外,如果不通过或更新显示,则显示不会更改

如果有一个主应用程序循环,请使用它。主应用程序循环必须:

  • 通过或处理事件
  • 根据输入事件和时间(分别为帧)更新游戏状态和对象位置
  • 清除整个显示或绘制背景
  • 绘制整个场景(
    blit
    所有对象)
  • 通过或更新显示

从未实现嵌套的应用程序循环。您必须更改控制流和应用程序的设计

你怎么知道程序崩溃了?