다시 블리 전하기 전에 반드시 원을 지워야합니다. 장면이 얼마나 복잡한 지에 따라 다른 방법을 시도해야 할 수도 있습니다. 일반적으로 내가하는 일은 매 프레임마다 blit하는 "배경"표면을 가지고 있고, 그 다음 새로운 위치에 스프라이트/다른 서페이스를 blit합니다 (파이 게임의 블리트는 매우 빠르므로 꽤 큰 스크린에서도 이를 수행하는 속도 문제). 위의 코드에서는 surface.fill(COLOR)
을 사용하기 만하면됩니다. COLOR
은 배경색입니다. 흰색에 대한 예를 들어, (255, 255, 255)는 : 귀하의 코멘트에 대답
# ...
screen = pygame.display.set_mode((640,400),0,32)
backgroundColor = (255,255,255)
# ...
while True:
# ...
screen.fill(backgroundColor)
screen.blit(circle,(pygame.mouse.get_pos()[0],100))
pygame.display.update()
pygame.time.delay(10)
편집 : 더 객체 지향적 인 방법으로이 작업을 수행 할 수 있습니다.
화면과 연결된 배경 화면이 있어야합니다 (보통 게임 유형에 따라 디스플레이 또는지도 클래스가 있습니다). 그런 다음 객체를 pygame.sprite
의 하위 클래스로 만듭니다. 이 경우 self.image
과 self.rect
속성이 있어야합니다 (이미지는 표면이고 피치는 rect와 같습니다). 모든 스프라이트를 pygame.group
오브젝트에 추가하십시오. 이제 모든 프레임에서 그룹에 대해 draw
메서드를 호출하고 디스플레이를 업데이트 한 후 (예 : pygame.display.update()) 그룹에 clear
메서드를 호출합니다. 이 방법을 사용하려면 대상 표면 (즉, 위의 screen
)과 배경 이미지를 모두 제공해야합니다.
예를 들어, 메인 루프는 더 같이 보일 수 있습니다 :
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
circle.rect.center = (pygame.mouse.get_pos()[0],100)
circleGroup.draw(screen)
pygame.display.update()
circleGroup.clear(screen, backgroundSurface)
pygame.time.delay(10)
자세한 내용은 스프라이트와 그룹 클래스에 documentation를 참조하십시오.
이 방법은 효과적이지만 효과가 있지만 더 많은 객체 지향 방법이 있습니까? 이 객체를 클래스 객체로 만들려고합니다. 그래서 screen.fill (bgColor)을 사용하지 않는 다른 방법이 있는지 궁금합니다. – lotsofsloths