0

私のゲームには、単純に水平方向に移動するタイプのオブジェクトがあります。次のようなメソッドがあります。

-(void)moveLeftWithBlock:(void(^)())block {
    self.targetX = self.position.x - MOVE_AMOUNT;
    id action = [CCMoveTo actionWithDuration:0.125f position:ccp(self.targetX, self.targetY)];
    id ease   = [CCEaseInOut actionWithAction:action rate:4];
    [self runAction: [CCSequence actions: ease,
                  [CCCallBlock actionWithBlock:block], nil]];
}

...

ここで、垂直方向にも移動できることを除いて、まったく同じ 2 番目のタイプのオブジェクトを作成したいと考えました...最初に考えたのは、そのオブジェクトのクラスをサブクラス化し、moveLeftWithBlock を上書きして、その targetY を更新することでした..しかし、それだけでなく2 つのクラス間でコードが 99% 重複しているだけでなく、moveLeftWithBlock メソッドが呼び出される前にゲームで Y 位置を設定する必要があるため、このソリューションは気に入らないのでしょうか。

次に考えたのは、ゲームで prepareToMove メソッドを呼び出せるようにすることです。これにより、必要となるあらゆる種類のセットアップを行うことができます...メインのオブジェクト タイプについては、何もしません..この 2 番目のオブジェクト タイプについては、ターゲットY.

しかし、私はすぐに考え始めました--待ってください----プロトコルはOPTIONALまたはREQUIREDのメソッドを明示的に定義することであることを知っており、おそらくここでこれを利用する必要があると思いましたが、方法がわかりません.

それで、この場合にプロトコルをどのように使用できるか、そしてそれが「行くべき道」であるかどうかを誰かが私に説明できますか?

4

1 に答える 1

0

これらのどれでも機能します。これに andAlsoMoveVertically: (bool) isVertical を追加してから、関数の if ステートメントに垂直方向の動きを追加できます。

于 2012-09-04T06:40:28.393 に答える