您可以编写将 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)
我个人不知道这与其他基于 sprite 的引擎相比有多快/慢,但它是构建一个可以绘制/擦除自身的类的一种非常快速的方法。
要使用它,只需创建一个显示屏和一个 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)
或者您只需更改一行即可将它们全部删除
for tv in tv_list:
tv.erase(screen)
最后,您可以在 TV 类中再添加一项功能,让您可以移动它。如果您将 .rect 成员视为“位置标记”,您所要做的就是摆弄其成员(呵呵)来更改对象的屏幕更新位置。
def move(self, move_amount=(1,0):
self.rect.move_ip(move_amount[0], move_amount[1])