0

CCMoveToアクションのチェーンとして、連続してスプライトを移動する必要があります。ただし、スプライト自体と持続時間は反復ごとに変更する必要があります。これがシングルアクションです。

id cloudAction = [CCSequence actions:
                      [CCMoveTo actionWithDuration:15.0 position:ccp(-spriteCloud.contentSize.width/2, windowSize.height/2)],
                      cloudActionComplete,
                      nil
                      ];
[spriteCloud runAction:cloudAction];

15秒、スプライト自体、開始位置、終了位置はすべて、実行するたびに変更する必要がありますCCMoveTocloudActionCompleteしかし、ブロックアクションからこのアクションをどれだけ効果的に再実行できるかはわかりません。CCRepeatForever私の行動の動的な性質のために使用できません。おそらく、そのようなタスクを達成するためのより良い方法はありますか?

アップデート:

これは私の試みです

    id cloudActionComplete = [CCCallBlock actionWithBlock:^(void)
                           {
                               spriteCloud.position = ccp(windowSize.width + spriteCloud.contentSize.width/2, windowSize.height/2);
                               id cloudAction = [CCSequence actions:
                                                 [CCMoveTo actionWithDuration:RANDOMRANGE(2, 10) position:ccp(-spriteCloud.contentSize.width/2, windowSize.height/2)],
                                                 cloudActionComplete,
                                                 nil
                                                 ];
                               [spriteCloud runAction:cloudAction];
                           }];

    [spriteCloud runAction:cloudActionComplete];

一度しか機能しません。問題は完了アクションの再帰にあると思います。cloudActionCompleteはゼロです。

4

1 に答える 1

0

まだ初期化されていないため、ブロック内で同じブロック変数を使用することはできません。または、雲を移動する関数を作成できます

- (void) moveCloud:(CCSprite*)spriteCloud
{
    spriteCloud.position = ccp(windowSize.width + spriteCloud.contentSize.width/2, windowSize.height/2);
    id cloudAction = [CCSequence actions:
                      [CCMoveTo actionWithDuration:RANDOMRANGE(2, 10) position:ccp(-spriteCloud.contentSize.width/2, windowSize.height/2)],
                      [CCCallFuncN actionWithTarget:self selector:@selector(moveCloud:)],
                      nil
                      ];

    [spriteCloud runAction:cloudAction];
}
于 2013-07-04T02:22:11.307 に答える