ホームページ >バックエンド開発 >Python チュートリアル >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 サイトの他の関連記事を参照してください。