我正在写一个简单的Pong游戏。我希望我的Paddle和我的Ball对象都继承自DynamicObj,这是一个父类,它有一个update
方法,使用基本的简单Euler积分来勾选位置。问题是Paddle对象的位置存储在rect中(因此使用rect.x访问x pos),Ball对象的位置存储在x和y值中。有没有办法让它们都能从能够勾选其位置的同一类继承?
这是我到目前为止所拥有的:
class DynamicObj:
def __init__(self, vel):
self.vel = vel
def update(self, delta):
self.x += self.vel.x * delta
self.y += self.vel.y * delta
class Ball(DynamicObj):
def __init__(self, x, y, radius, vel):
self.x = x
self.y = y
self.radius = radius
self.vel = vel
class Paddle(DynamicObj):
def __init__(self, rect, vel):
self.rect = rect
self.vel = vel
#what I want is to create self.x and self.y that respectively point to the same place as self.rect.x and self.rect.y
我在考虑用property
做这件事。
答案 0 :(得分:1)
是的,properties会有所帮助:
class Paddle(DynamicObj):
# ...
@property
def x(self):
return self.rect.x
现在你的划水盘将有一个只读字段x
。如果你想要一个setter,请使用@x.setter
来装饰它。
但我仍然认为你的想法是错误的。在矩形方面操作通常要容易得多。如果您碰巧使用pygame,它有许多简洁的方法。只需基于矩形类创建每个对象,或者使用统一的方式获取它(即接口)。
为什么在地球上,你会问,如果用圆形球做矩形吗?那是因为粗略碰撞检测对于矩形来说很便宜(再次参见pygame的有效方法)。如果两个矩形没有碰撞,由它们限制的复杂形状的物体当然也不会。只有当边界矩形碰撞时,您才必须进行可能更昂贵的精确碰撞检查。
答案 1 :(得分:0)
你的意思是,这个?
class Paddle(DynamicObj):
def __init__(self, rect, vel):
self.x = rect.x
self.y = rect.y
self.vel = vel
编辑: 好的,所以我将这个“答案”作为澄清......