2015-06-08 44 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的的雪碧继承“游戏对象”基类)