0

私はやってみたいです:

id action = [CCScaleTo actionWithDuration:0.5 scaleX:self.Xposition scaleY:1];
id ease   = [CCEaseInOut actionWithAction:action rate:4];

[someObject[i] runAction:ease];

しかし、アクションの各フレームにフックしていくつかのことを実行できるようにしたい... someObject で update メソッドを作成する以外にこれを達成する方法があるかどうか疑問に思っていますか? それは CCSprite であるため、それを回避しようとしていますが、現在はそのためのオブジェクト ラッパーを持っていません。文字通り、ヘッダーで CCSprite *someObject[4] のようなものとして定義されているだけです。 runAction のコンテキストでフレームごとのコールバックを指定する方法はありますか?

4

2 に答える 2

1

救助へのブロック!!! :)

id action = [CCScaleTo actionWithDuration:0.5 scaleX:self.Xposition scaleY:1];
id ease   = [CCEaseInOut actionWithAction:action rate:4];
id call = [CCCallBlockN actionWithBlock:^(CCNode* node) {
    // node is the sprite, you may have to cast it:
    CCSprite* someSprite = (CCSprite*)node;

    // do whatever you need to do with sprite here…
    someSprite.opacity = CCRANDOM_0_1() * 255;
}];
id sequence = [CCSequence actions:action, ease, call, nil];

[someObject[i] runAction:sequence];

または、単純に someObject[i] 配列を使用して、他のスプライトにアクセスすることもできます。

id action = [CCScaleTo actionWithDuration:0.5 scaleX:self.Xposition scaleY:1];
id ease   = [CCEaseInOut actionWithAction:action rate:4];
id call = [CCCallBlock actionWithBlock:^{
    CCSprite* someSprite = someObject[i];
    CCSprite* firstSprite = someObject[0];

    // do whatever you need to do with sprite here…
}];
id sequence = [CCSequence actions:action, ease, call, nil];

[someObject[i] runAction:sequence];
于 2012-09-18T08:06:46.020 に答える
1

これを行うネイティブな方法はありません。

更新メソッドを使用するのではなく、これが本当にやりたいことである場合は、Ease アクションがどのように機能するかに似たクラスを作成できます。パラメータとして別のアクションを取り、更新をオーバーライドしてその動作を変更します。

たとえば、CCCallBackAction という名前の場合、次のように作成されます。

id action = [CCScaleTo actionWithDuration:0.5 scaleX:self.Xposition scaleY:1];
id ease   = [CCEaseInOut actionWithAction:action rate:4];
id callback = [CCCallBackAction actionWithAction:ease target:self selector:@selector(callback:)];

[someObject[i] runAction:callback];

CCCallBackAction では、更新をオーバーライドします

- (void)update:(ccTime)dt
{
     [target performSelector:SEL];
     [other update:dt];
}

誤解を避けるための注意: CCCallBackAction は cocos2d クラスではありません。この例では仮説です。

于 2012-09-18T02:00:05.290 に答える