1

簡単なポンゲームを書いています。PaddleオブジェクトとBallオブジェクトの両方が、update基本的な単純なオイラー統合を使用して位置をチェックするメソッドを持つ親クラスであるDynamicObjから継承するようにします。問題は、Paddleオブジェクトの位置がrectに格納され(したがって、x posはrect.xを使用してアクセスされる)、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の効率的な方法を参照してください)。2つの長方形が衝突しない場合、それらで囲まれた複雑な形状のオブジェクトも衝突しません。境界の長方形が衝突する場合にのみ、より高価な正確な衝突チェックを実行する必要があります。

于 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 に答える