我目前正在學習 pygame 和 python,關于 while True 陳述句,有些東西讓我有點困惑。我目前只是打開一個黑色視窗,螢屏上有一個粉紅色的方塊。這就是下面的代碼所做的。
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:
兩次運行都打開了視窗并立即關閉了它。但是,當我將其更改為
while pygame.init() != True:
然后窗戶保持打開狀態,就像我使用時一樣
while True:
直覺上,如果相反的情況是真的,對我來說會更有意義嗎?IE,當pygame.init()(即視窗被初始化)為True時,執行以下操作。然而,它是說,雖然視窗沒有初始化(即不是真的),請執行以下操作。
我顯然錯過了一些東西。
uj5u.com熱心網友回復:
pygame.init()不回傳True或False。pygame.init()回傳一個包含 2 個組件的元組。因此pygame.init() == True總是False并且pygame.init() != True總是True。
uj5u.com熱心網友回復:
回圈while True:是無限回圈。它將繼續運行它的主體,直到程式終止或回圈內的某些東西將控制權從回圈中中斷。
但是,要很好地跳出回圈,您需要兩個 breaks。一個用于內回圈(處理所有未決事件),然后一個用于外回圈。對于后者,您需要設定一個標志,表明您已經看到了“退出”事件。所以它變得有點亂。
它現在的設定方式沒有本質上的錯誤。但要演示更優雅的程式流程,請參閱以下內容:
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()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/397242.html
