在 Python 中同時產生多個遊戲物件時如何避免覆蓋?

Patricia Arquette
發布: 2024-11-26 16:50:10
原創
334 人瀏覽過

How to Avoid Overwriting When Spawning Multiple Game Objects Concurrently in Python?

在 Python 中同時產生同一物件的多個實例

在遊戲中,您希望同時實例化同一物件(圓圈)的多個實例。但是,您遇到了一個問題,即隨後生成的圓圈會覆蓋先前的圓圈。

問題在於 time.sleep() 的使用。此函數會停止程式執行,從而阻止遊戲物件的連續渲染。為了解決這個問題,您需要使用替代方法來控制遊戲循環中的時間。

一種方法是利用 pygame.time.get_ticks() 函數,該函數傳回自 pygame 初始化以來的毫秒數。您可以建立一個時間間隔,例如 500 毫秒,之後應產生一個新物件。透過測量當前時間並將其與目標時間進行比較,您可以相應地建立新物件。

另一個選項涉及使用 pygame.event 模組和 pygame.time.set_timer()。這種方法可讓您定義自訂事件(例如,USEREVENT 1)並指定重複建立事件的時間間隔(以毫秒為單位)。在事件循環中,您可以檢查此自訂事件並在發生時產生新物件。

這是使用第一種方法與 pygame.time.get_ticks() 的範例:

import pygame
import random

pygame.init()

window = pygame.display.set_mode((800, 600))

class Circle():
    def __init__(self, color, x, y, radius, width):
        self.color = color
        self.x = x
        self.y = y
        self.radius = radius
        self.width = width

    def draw(self, win, outline=None):
        pygame.draw.circle(win, self.color, (self.x, self.y, self.radius, self.width), 0)

object_list = []
time_interval = 500  # 500 milliseconds == 0.5 seconds
next_object_time = 0

run = True
while run:
    window.fill((0, 0, 0))

    current_time = pygame.time.get_ticks()
    if current_time > next_object_time:
        next_object_time += time_interval
        object_list.append(Circle((255, 255, 255), random.randint(0, 800), random.randint(0, 600), 20, 20))

    for object in object_list:
        object.draw(window)

    pygame.display.update()

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
            pygame.quit()
            quit()
登入後複製

使用此程式碼,圓圈將每 500 毫秒產生一次,解決覆蓋問題。請記住維護已建立物件的清單(本例中為 object_list)並重繪每個影格中的所有物件(包括新物件)以確保它們保持可見。

以上是在 Python 中同時產生多個遊戲物件時如何避免覆蓋?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板