在 Pygame 中循环时,不理解特定的 True 语句
While Loops in Pygame, not understanding a particular True statement
我目前正在学习 pygame 和 python 的一般知识,关于 while True 语句,有些事情让我有些困惑。我目前只是在屏幕上打开一个带有粉红色方块的黑色 window。这就是下面代码的作用。
import pygame
import sys
from pygame import surface
pygame.init()
screen = pygame.display.set_mode((1600, 900))
pygame.display.set_caption('Yohora')
test_surface = pygame.Surface((100, 100))
test_surface.fill('pink')
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
screen.blit(test_surface, (200,100)) # Displays pink square
pygame.display.update()
我想更好地理解这个 True 语句并理解它到底指的是什么。
所以我改成了
while screen == True:
和
while pygame.init() == True:
两次运行都打开了 window 并立即关闭了它。但是,当我将其更改为
while pygame.init() != True:
然后 window 保持打开状态,就像我使用
时一样
while True:
直觉上,如果情况正好相反,对我来说会更有意义吗?即,当 pygame.init()(即 window 已初始化)为 True 时,请执行以下操作。但是,它是说,虽然 window 未初始化(即不正确),但请执行以下操作。
我显然漏掉了什么。
pygame.init()
不是 return True
或 False
。 pygame.init()
return 是一个包含 2 个组件的元组。因此 pygame.init() == True
总是 False
而 pygame.init() != True
总是 True
.
循环while True:
是一个无限循环。它将保留 运行 其主体,直到程序终止或循环内的某些内容将控制从循环中中断。
但是,要很好地跳出循环,您需要 两个 break
s。一个用于内部循环(处理所有未决事件),然后一个用于外部循环。对于后者,您需要设置一个标志,表明您已经看到 'quit' 事件。所以它变得有点乱。
现在的设置方式本质上没有任何问题。但是为了演示更优雅的程序流程,请看这个:
while True:
should_quit = False
# Process pending events
for event in pygame.event.get():
if event.type == pygame.QUIT:
should_quit = True
break
# Are we done?
if should_quit:
break
# Update
screen.blit(test_surface, (200,100))
pygame.display.update()
# Do game cleanup (and any of your own cleanup) here
pygame.quit()
您可以看到这种模式给您的事件循环增加了一些混乱。另请注意,我删除了 sys.exit()
调用(这是在循环内终止程序的原因)。
如果您想删除额外的中断,请考虑将显示+更新步骤移动到之前您的事件泵,然后您可以将主循环更改为:
should_quit = False
while not should_quit:
# Update
screen.blit(test_surface, (200,100))
pygame.display.update()
# Process events
for event in pygame.event.get():
if event.type == pygame.QUIT:
should_quit = True
break
# Do game cleanup (and any of your own cleanup) here
pygame.quit()
我目前正在学习 pygame 和 python 的一般知识,关于 while True 语句,有些事情让我有些困惑。我目前只是在屏幕上打开一个带有粉红色方块的黑色 window。这就是下面代码的作用。
import pygame
import sys
from pygame import surface
pygame.init()
screen = pygame.display.set_mode((1600, 900))
pygame.display.set_caption('Yohora')
test_surface = pygame.Surface((100, 100))
test_surface.fill('pink')
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
screen.blit(test_surface, (200,100)) # Displays pink square
pygame.display.update()
我想更好地理解这个 True 语句并理解它到底指的是什么。
所以我改成了
while screen == True:
和
while pygame.init() == True:
两次运行都打开了 window 并立即关闭了它。但是,当我将其更改为
while pygame.init() != True:
然后 window 保持打开状态,就像我使用
时一样while True:
直觉上,如果情况正好相反,对我来说会更有意义吗?即,当 pygame.init()(即 window 已初始化)为 True 时,请执行以下操作。但是,它是说,虽然 window 未初始化(即不正确),但请执行以下操作。
我显然漏掉了什么。
pygame.init()
不是 return True
或 False
。 pygame.init()
return 是一个包含 2 个组件的元组。因此 pygame.init() == True
总是 False
而 pygame.init() != True
总是 True
.
循环while True:
是一个无限循环。它将保留 运行 其主体,直到程序终止或循环内的某些内容将控制从循环中中断。
但是,要很好地跳出循环,您需要 两个 break
s。一个用于内部循环(处理所有未决事件),然后一个用于外部循环。对于后者,您需要设置一个标志,表明您已经看到 'quit' 事件。所以它变得有点乱。
现在的设置方式本质上没有任何问题。但是为了演示更优雅的程序流程,请看这个:
while True:
should_quit = False
# Process pending events
for event in pygame.event.get():
if event.type == pygame.QUIT:
should_quit = True
break
# Are we done?
if should_quit:
break
# Update
screen.blit(test_surface, (200,100))
pygame.display.update()
# Do game cleanup (and any of your own cleanup) here
pygame.quit()
您可以看到这种模式给您的事件循环增加了一些混乱。另请注意,我删除了 sys.exit()
调用(这是在循环内终止程序的原因)。
如果您想删除额外的中断,请考虑将显示+更新步骤移动到之前您的事件泵,然后您可以将主循环更改为:
should_quit = False
while not should_quit:
# Update
screen.blit(test_surface, (200,100))
pygame.display.update()
# Process events
for event in pygame.event.get():
if event.type == pygame.QUIT:
should_quit = True
break
# Do game cleanup (and any of your own cleanup) here
pygame.quit()