首頁 >後端開發 >Python教學 >為什麼我的 PyGame 程式碼沒有繪製任何內容?

為什麼我的 PyGame 程式碼沒有繪製任何內容?

DDD
DDD原創
2024-12-26 00:37:13627瀏覽

Why Doesn't My PyGame Code Draw Anything?

為什麼 PyGame 無法繪製任何內容

您的 PyGame 專案旨在使用 pygame.draw.rect() 創建一個灰色底部和黑色頂部的背景功能。儘管以前使用此功能有成功的經驗,但您仍會遇到不一致的繪圖結果。有時,您會看到黑屏,而其他時候,螢幕上會出現部分灰色矩形。

造成混亂的原因在於,僅繪圖不會在 PyGame 中產生可見輸出。修改關聯的表面後,您需要更新顯示以使這些變更可見。

顯示更新

繪圖發生在與 PyGame 顯示關聯的 Surface 物件上。但是,這些變更不會自動反映在顯示中。要使它們可見,您必須使用 pygame.display.update() 或 pygame.display.flip() 明確更新顯示。

pygame.display.flip() 更新整個顯示,而 pygame.display.update() 為螢幕的特定區域提供更具選擇性的更新。它通常針對軟體顯示器進行了更優化,但不支援硬體加速顯示。

PyGame 應用程式循環

典型的PyGame 應用程式循環由幾個步驟組成:

  1. 事件處理:使用pygame. .pump()或pygame.event.get().
  2. 狀態更新:根據輸入事件和時間(幀)更新遊戲狀態和物件位置。
  3. 顯示清除:清除顯示或繪製背景。
  4. 場景繪製:繪製場景中的所有物件。
  5. 顯示更新:呼叫 pygame.display.update() 或 pygame.display.flip() 讓變更可見。
  6. 幀速率限制:限制每秒幀數以避免過多的 CPU使用pygame.time.Clock.tick.

程式碼範例

以下是包含顯示更新的修改後的程式碼:

import pygame
from pygame.locals import *
pygame.init()

DISPLAY = pygame.display.set_mode((800,800))
pygame.display.set_caption("thing")
clock = pygame.time.Clock()

run = True
while run:
    # handle events
    for event in pygame.event.get():
        if event.type == QUIT:
            run = False

    # clear display
    DISPLAY.fill(0)

    # draw scene
    pygame.draw.rect(DISPLAY, (200,200,200), pygame.Rect(0,400,800,400))

    # update display
    pygame.display.flip()

    # limit frames per second
    clock.tick(60)

pygame.quit()
exit()

透過合併必要的修改後的程式碼:

透過合併必要的修改後的程式碼:透過合併必要的修改後的程式碼:透過合併必要的修正顯示更新,您現在應該看到預期的背景,底部為灰色,頂部為黑色。

以上是為什麼我的 PyGame 程式碼沒有繪製任何內容?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn