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;
}