为什么循环运行时我的游戏会崩溃一次(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.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

然而,每当你点击商店按钮时,这个功能就会运行,而self.instop在if语句中时,游戏会立即停止响应并崩溃。这可能是一个非常简单的解决方案,因为我对pygame和整个python语言还不太熟悉。然而,话虽如此,我似乎在其他任何地方都找不到解决方案。

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

def shop_button(self):
# [...]
while self.inshop:
pygame.time.delay(10)
mousepos = pygame.mouse.get_pos()
# [...]

pygame.mouse.get_pos()返回的位置从内部缓存中读取。当事件由pygame.event.pump()pygame.event.get()处理时,缓存被更新
这意味着,如果您在循环中检索位置,而不处理事件,则该位置不会反映当前鼠标位置,而是连续相同的位置,即循环之前调用pygame.event.get()时的位置
此外,在不更新显示的情况下,pygame.display.flip()pygame.display.update()不会更改显示Surface

你有一个主应用程序循环,使用它。主应用程序环路必须:

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

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

最新更新