2010-02-06 4 views
3

다음 코드에서 특정 시점의 화면에는 동그라미가 단지 이 아닙니다. 마우스 커서가 있던 곳에 얼룩 흔적을 남기는 대신 하나의 원이있는 것처럼 보이도록이 문제를 해결하고 싶습니다.파이 게임 표면을 제거하는 방법은 무엇입니까?

import pygame,sys 
from pygame.locals import * 
pygame.init() 

screen = pygame.display.set_mode((640,400),0,32) 

radius = 25 
circle = pygame.Surface([radius*2]*2,SRCALPHA,32) 
circle = circle.convert_alpha() 
pygame.draw.circle(circle,(25,46,100),[radius]*2,radius) 

while True: 
    for event in pygame.event.get(): 
     if event.type == QUIT: 
      pygame.quit() 
      sys.exit() 

    screen.blit(circle,(pygame.mouse.get_pos()[0],100)) 

    pygame.display.update() 
    pygame.time.delay(10) 

답변

6

다시 블리 전하기 전에 반드시 원을 지워야합니다. 장면이 얼마나 복잡한 지에 따라 다른 방법을 시도해야 할 수도 있습니다. 일반적으로 내가하는 일은 매 프레임마다 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.imageself.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를 참조하십시오.

+0

이 방법은 효과적이지만 효과가 있지만 더 많은 객체 지향 방법이 있습니까? 이 객체를 클래스 객체로 만들려고합니다. 그래서 screen.fill (bgColor)을 사용하지 않는 다른 방법이 있는지 궁금합니다. – lotsofsloths