扩展 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)
所以我正在用 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)