1

我正在编写一个简单的 Pong 游戏。我希望我的 Paddle 和我的 Ball 对象都从 DynamicObj 继承,DynamicObj 是一个父类,它有一个update使用基本的简单欧拉积分来标记位置的方法。问题是 Paddle 对象的位置存储在 rect 中(因此使用 rect.x 访问 x pos),而 Ball 对象的位置存储在 ax 和 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.

4

2 回答 2

1

是的,属性会有所帮助:

class Paddle(DynamicObj):
    # ...
    @property
    def x(self):
        return self.rect.x

现在你的桨将有一个只读字段x。如果你想要一个二传手,用@x.setter它来装饰它。

但我仍然认为你的想法是错误的。就矩形而言,操作通常要容易得多。如果您碰巧使用 pygame,它有许多巧妙的方法。只要让你的每一个对象要么基于一个矩形类,要么有一个统一的方式来获取它(即一个接口)。

你会问,到底为什么要使用矩形作为圆形球?那是因为粗略的碰撞检测对于矩形来说很便宜(再次参见 pygame 的有效方法)。如果两个矩形不发生碰撞,那么由它们包围的形状复杂的对象也肯定不会发生碰撞。只有当边界矩形发生碰撞时,您才必须运行可能更昂贵的精确碰撞检查。

于 2012-09-18T16:32:45.277 回答
0

你是说,这个?

class Paddle(DynamicObj):
def __init__(self, rect, vel):
    self.x = rect.x
    self.y = rect.y
    self.vel = vel

编辑:好的,所以我会留下这个“答案”作为澄清......

于 2012-09-18T16:17:30.407 回答