美好的一天。我在Python 3.6.5中使用Pygame。这是我的代码:
if event.type == pygame.KEYDOWN:
if pygame.key == pygame.K_UP:
my_change = -15
my += my_change
pygame.display.update()
clock.tick(24)
我的问题是,当我添加
running = True
while running:
在该代码的顶部,然后运行它,即使我添加了 2行代码!
,我的窗口也停止了响应。P.S:我还没有代码可以打破 的局面。这可能是其原因之一吗?不过,我会在代码的后面缩进 ,因此它只能运行很短的一段时间。另外:这实际上是在我的主游戏循环中。另外:我的精灵Super Mario刚好跌入了我的视野。
关于此和/或如何解决此问题的任何帮助或想法?
谢谢!
答案 0 :(得分:1)
尝试在您的
之前添加for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if pygame.key == pygame.K_UP:
my_change = -15
因此它变为:
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if pygame.key == pygame.K_UP:
my_change = -15
根据Pygame Documentation,“ Pygame通过事件队列处理其所有事件消息。此模块中的例程可帮助您管理该事件队列。输入队列在很大程度上取决于pygame显示模块。显示尚未初始化且未设置视频模式,事件队列将无法真正工作。”
通过调用“ pygame.event.get()”,“这将获取所有消息并将其从队列中删除。如果给出类型或类型序列,则仅将这些消息从队列中删除。
如果仅从队列中提取特定事件,请注意队列最终可能会填充您不感兴趣的事件。”
答案 1 :(得分:0)
我认为这是您的循环问题。
在pygame循环中:
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
pygame.display.update()
如您所见,这是一个无限循环。然后,问题发生在这里:
running = True
while running:
if event.type == pygame.KEYDOWN:
if pygame.key == pygame.K_UP:
my_change = -15
以此,您可以在主循环中创建另一个无限循环。因此,此代码将永远无法更新pygame窗口(因为它被困在嵌套循环中)。
请记住,在pygame中进行更新仅应执行一次操作。因为该操作将对主游戏循环中的每个循环重复进行。考虑到这一点,请尝试修改您的代码。现在,无论我们如何安排,您的代码都将无法正常工作。
提示: 对于角色运动,我认为最常见的方法是创建一个类来处理您的角色,并为其添加功能以更新其位置。
可能的解决方法: 将运行中移动到事件循环之外。然后,在您的keydown事件中添加运行作为另一项检查。
running = True
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
if running and event.type == pygame.KEYDOWN:
if pygame.key == pygame.K_UP:
my_change = -15
my += my_change
pygame.display.update()