당신은 매개 변수로 pygame.Surface 객체를 가지고 함수를 작성할 수 있습니다 :
class TV():
def __init__(self):
self.img = ...
### insert code to load image here
self.rect = self.img.get_rect()
def draw(self, surface):
surface.blit(self.img, self.rect.topleft)
def erase(self, surface, background):
surface.blit(background, self.rect)
필자는 다른 스프라이트 기반 엔진과 비교해 얼마나 빠르거나 느린지 개인적으로 알지 못하지만 그 자체를 그리거나 지울 수있는 클래스를 만드는 것은 매우 빠릅니다.
사용하려면 디스플레이 화면과 TV 개체를 만드십시오.
screen = pygame.display.set_mode((256, 256))
background = pygame.Surface((0,0),(256,256))
background.fill(pygame.Color(0,0,0))
screen.fill(pygame.Color(0,0,0))
myTVobj = TV()
화면에 TV의 사본을 그릴 할 때마다 당신은 당신이 나중에 재미있는 물건을 할 수있는 그런
myTVobj.erase(screen, background)
사용
myTVobj.draw(screen)
개체를 지우려면 전화 TV 클래스에서 생성 된 객체를 목록에 붙여 넣는 것과 같습니다.
tv_list = []
tv_list.append(myTVobj)
TV에 전체 TV를 추가하여 동시에 모두 그릴 수 있습니다.
tv_list = []
tv_list.append(myTVobj)
tv_list.append(myTVobj)
tv_list.append(myTVobj)
for tv in tv_list:
tv.draw(screen)
또는 당신은 단지 마지막으로, 당신은 당신이 주위를 이동할 수 있습니다 귀하의 TV 클래스에 또 하나 개의 기능을 추가 할 수있는 한 줄
for tv in tv_list:
tv.erase(screen)
을 변경하여 모두 삭제할 수 있습니다. .rect 멤버를 '위치 표시 자'로 취급하는 경우 멤버 (hehe)와 함께 객체의 화면상의 업데이트 위치를 변경하기 만하면됩니다.
def move(self, move_amount=(1,0):
self.rect.move_ip(move_amount[0], move_amount[1])
하지만 다음과 같은 것들을하는 것은 정말 짜증이납니다. dostuff (tv, main, houses, buildings, people, tiles) – SuperDisk
@SuperDisk : 동의합니다. 그 이유는 속성을 사용하여 인스턴스화 된 클래스를 작성하고 작성해야하는 이유입니다. 그리고 그 방법들은 그 속성들에 대해 작업합니다. 이것은 모듈 작성 방법의 아주 기본적인 예입니다. 많은 파이 게임 예제에서 볼 수 있듯이, 사람들은 기존 클래스를 서브 클래스 화하여 사용자 정의 작업을 수행합니다. 제대로 했으므로 10 개의 인수를 가진 함수를 호출 할 필요가 없습니다. – jdi