使用动态组件对sprite进行连续操作

时间:2013-07-03 19:58:25

标签: cocos2d-iphone action sprite

我需要连续使用CCMoveTo移动一个精灵,作为一系列动作。但是,每次迭代都需要更改精灵本身以及持续时间。这是单一行动。

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

15秒,精灵本身,起始位置,结束位置都需要在每次CCMoveTo完成时更改。但我不确定如何从cloudActionComplete阻止行动中有效地重新执行此操作。由于动作的动态特性,我无法使用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是零。

1 个答案:

答案 0 :(得分: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];
}