ホームページ > バックエンド開発 > Python チュートリアル > Python で複数のゲーム オブジェクトを同時に生成するときに上書きを回避するにはどうすればよいですか?

Python で複数のゲーム オブジェクトを同時に生成するときに上書きを回避するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-26 16:50:10
オリジナル
391 人が閲覧しました

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

Python で同じオブジェクトの複数のインスタンスを同時に生成する

ゲームで、同じオブジェクト (円) の複数のインスタンスを同時にインスタンス化したいとします。ただし、その後に生成されたサークルが以前のサークルを上書きするという問題が発生しました。

問題は time.sleep() の使用にあります。この関数はプログラムの実行を停止し、ゲーム オブジェクトの継続的なレンダリングを防ぎます。これに対処するには、別の方法を使用してゲーム ループ内の時間を制御する必要があります。

1 つの方法は、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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート