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 중국어 웹사이트의 기타 관련 기사를 참조하세요!