0

Cocos2d で単純な 2D ゲームを構築しています。これには、敵がさまざまな事前定義されたパスを横切って画面を横切ることが含まれます。nextFrame メソッドには次のコードがあります。

    int indexCount = 0;
for (Enemy *e in enemies) {

    if ([cocosGuy doesCollideWithRect: [e boundingBox]])
    {
        for (Enemy *e in enemies)
        {
            [self removeChild: e cleanup: YES];
        }
        [self startGame];
    }
    // ^ This code not relevant to the question
    if ([e numberOfRunningActions] == 0)
    {
        [e setPosition: [[enemy_positions objectAtIndex:indexCount] CGPointValue]];
        [e runAction: [beziers objectAtIndex: indexCount]];
    }
    ++indexCount;
}

上記の 2 番目の if ステートメントのコードは、「enemy_positions」配列から CGPoint を取得し、「beziers」配列から CCActionInterval を取得することを目的としています。機能します - 敵がその経路を完了すると、位置が変更され、アクションが再実行されます。しかし、アクションが初めて実行された後、これが壊れないのはなぜでしょうか? CCActions は 1 回だけであるべきではないですか?

位置とアクションを 1 つの構造体にリファクタリングしたいので質問します。最初に何が起こっているのかを確認したいのです。CCAction クラスを誤解していますか?

また、「ベジエ」配列を生成するための現在のファクトリ メソッドは次のとおりです。

-(NSArray*) makeBeziers {

ccBezierConfig bezierconf1;
bezierconf1.controlPoint_1 = ccp(-200, 5);
bezierconf1.controlPoint_2 = ccp(300, 100);
bezierconf1.endPosition = ccp(1000,5);

ccBezierConfig bezierconf2;
bezierconf2.controlPoint_1 = ccp(-200, 5);
bezierconf2.controlPoint_2 = ccp(300, 100);
bezierconf2.endPosition = ccp(1000,5);

ccBezierConfig bezierconf3;
bezierconf3.controlPoint_1 = ccp(-200, 5);
bezierconf3.controlPoint_2 = ccp(300, 100);
bezierconf3.endPosition = ccp(1000,5);

NSArray *myarray;

myarray = [[NSArray arrayWithObjects: [CCBezierBy actionWithDuration:3 bezier: bezierconf1],
                [CCBezierBy actionWithDuration:3 bezier: bezierconf2],
                [CCBezierBy actionWithDuration:3 bezier: bezierconf3],
                nil] retain];
return myarray;
}
4

1 に答える 1

0

これは「偶然に」機能します。アクションは1回だけであると想定されています。それらが実行された後、それらは解放されます。

ただし、アクションを別の配列に格納するため、それらのアクションは保持されます。したがって、それらを再実行できます。これは一部のアクションで機能する場合があり、他のアクションは微妙な問題を示す場合があり、一部のアクションは何も実行しない、メモリをリークする、またはそうするとすぐにクラッシュする場合があります。

各アクションのコードを知っていて、それを再利用しても「悪い」ことは何も起こらないことを確認しない限り、アクションの再利用は一般に悪い習慣と見なされます。

于 2012-09-15T21:53:59.157 に答える