>백엔드 개발 >파이썬 튜토리얼 >Python에서 동시에 여러 게임 개체를 생성할 때 덮어쓰기를 방지하는 방법은 무엇입니까?

Python에서 동시에 여러 게임 개체를 생성할 때 덮어쓰기를 방지하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-26 16:50:10393검색

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

Python에서 동시에 동일한 개체의 여러 인스턴스 생성

게임에서 동일한 개체(원)의 여러 인스턴스를 동시에 인스턴스화하려고 합니다. 그러나 나중에 생성된 원이 이전 원을 덮어쓰는 문제가 발생했습니다.

문제는 time.sleep() 사용에 있습니다. 이 기능은 프로그램 실행을 중단하여 게임 개체의 연속 렌더링을 방지합니다. 이 문제를 해결하려면 대체 방법을 사용하여 게임 루프 내에서 시간을 제어해야 합니다.

한 가지 접근 방식은 pygame 초기화 이후의 밀리초 수를 반환하는 pygame.time.get_ticks() 함수를 활용하는 것입니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.