您可以編寫採取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的引擎相比有多快/多慢,但它是構建一個可以繪製/擦除自己的類的非常快速的方法。
要使用它,只需創建一個顯示屏幕和一個電視對象。
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_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)
最後,您可以添加更多的功能,電視類,可以讓你移動它刪除它們。如果您將.rect成員視爲「位置標記」,則您只需調整其成員(hehe)即可更改對象的屏幕更新位置。
def move(self, move_amount=(1,0):
self.rect.move_ip(move_amount[0], move_amount[1])
很好的答案。但它真的很煩人做像這樣的東西: dostuff(電視,主要,房屋,建築物,人,瓷磚) – SuperDisk 2012-04-23 00:42:25
@SuperDisk:我同意。這就是爲什麼你會嘗試編寫使用屬性實例化的類。這些方法適用於這些屬性。這是如何編寫模塊的一個非常基本的例子。正如你可以在很多pygame例子中看到的那樣,人們對現有的類進行子類化以實現自定義的東西。做對了,你不應該用10個參數來調用一個函數。 – jdi 2012-04-23 00:44:23