2015-06-08 43 views
3

所以我正在用pygame編寫一個python遊戲,並且我爲不同的sprites分開了一些類(類型爲pygame.sprite.Sprite) - 但它們都共享很多常見的物理代碼。我如何擴展基本精靈類,以便共同的物理內容寫入一次,並且我只是向每個需要的精靈類添加類特定的東西?擴展pygame sprite類

例如從這一變化:

class ShipSprite(pygame.sprite.Sprite): 

    def __init__(self, start_position=(500,500)): 
     # Call the sprite initialiser 
     pygame.sprite.Sprite.__init__(self) 

     init_stuff() 

    def common_physics_stuff() 
     pass 

    def ship_specific_stuff() 
     pass 

class AsteroidSprite(pygame.sprite.Sprite): 

    def __init__(self, start_position=(500,500)): 
     # Call the sprite initialiser 
     pygame.sprite.Sprite.__init__(self) 

     init_stuff() 

    def common_physics_stuff() 
     pass 

    def asteroid_specific_stuff() 
     pass 

進入這個

class my_custom_class() 
    def common_physics_stuff() 
     pass 

class ShipSprite(my_custom_class): 

    def __init__(self, start_position=(500,500)): 
     # Call the sprite initialiser 
     pygame.sprite.Sprite.__init__(self) 

     init_stuff() 

    def ship_specific_stuff() 
     pass 

class AsteroidSprite(my_custom_class): 

    def __init__(self, start_position=(500,500)): 
     # Call the sprite initialiser 
     pygame.sprite.Sprite.__init__(self) 

     init_stuff() 

    def asteroid_specific_stuff() 
     pass 
+2

你就不能使用'my_custom_class(pygame.sprite.Sprite)'做你的自定義的繼承自基類? – SuperBiasedMan

回答

2

剛剛從Sprite繼承你的中級班,然後從它繼承:

class my_custom_class(pygame.sprite.Sprite): 
    def common_physics_stuff() 
     pass 

class ShipSprite(my_custom_class): 
    ... 

如果你想補充你的「custom_class 「事情到一個有點抽象的類,不必像雪碧一樣行事,並可以在其他情況下使用,你也可以使用多重繼承 -

class my_custom_class(object): 
    def common_physics_stuff() 
     pass 

class ShipSprite(pygame.sprite.Sprite, my_custom_class): 
    ... 

但是,這很可能會矯枉過正 - 在任意這兩種情況下,你在你的遊戲類重寫任何方法,只記得打電話uisng的super Python的內置適當的父類的方法。

(在我的小遊戲項目,我通常會做我所有的物體從pygame的的雪碧繼承「遊戲對象」基類)