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()
テレビのコピーを電話をかける画面に描きたいときはいつでも
myTVobj.draw(screen)
オブジェクトを消去するには、
myTVobj.erase(screen, background)
その後、TVクラスから作成されたオブジェクトをリストに貼り付けるなど、後で楽しいことを行うことができます。
tv_list = []
tv_list.append(myTVobj)
たくさんのテレビをリストに追加して、それらすべてを同時に描くことができます。
tv_list = []
tv_list.append(myTVobj)
tv_list.append(myTVobj)
tv_list.append(myTVobj)
for tv in tv_list:
tv.draw(screen)
または、1行変更するだけですべて消去できます
for tv in tv_list:
tv.erase(screen)
最後に、TVクラスにもう1つの関数を追加して、TVクラスを移動できます。.rectメンバーを「位置マーカー」として扱う場合は、そのメンバー(hehe)をいじって、オブジェクトの画面上の更新位置を変更するだけです。
def move(self, move_amount=(1,0):
self.rect.move_ip(move_amount[0], move_amount[1])