扩展 pygame 精灵 class

Extending pygame sprite class

所以我正在用 pygame 在 python 中编写游戏,并且我有单独的 classes(pygame.sprite.Sprite 类型)用于我的不同精灵 -然而,它们都有很多共同的物理代码。我怎样才能扩展基本精灵 class,以便只写一次常见的物理东西,然后我只需向 class 需要的每个精灵添加 class 特定的东西?

例如从此改变:

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

只需从 Sprite 继承你的中间体 class,然后继承它:

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

class ShipSprite(my_custom_class):
    ...

如果您想将 "custom_class" 东西添加到某种抽象的 class 中,它的行为不必像 Sprite,并且可以在其他上下文中使用,您可以使用多重继承也是如此 -

class my_custom_class(object):
    def common_physics_stuff()
        pass

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

但这可能有点矫枉过正 - 在这两种情况中的任何一种情况下,在游戏 classes 中重写的任何方法上,请记住调用正确的祖先方法 uisng super Python内置。

(在我的小游戏项目中,我通常为所有继承自 Pygame 的 Sprite 的对象做一个 "GameObject" 基础 class)