2013-07-03 24 views
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秒,精靈本身,起始位置,結束位置都需要每個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是零。

+0

動態行爲跳躍動作,全線通過更新位置每幀移動的節點,這樣,你有完全的控制 – LearnCocos2D

+0

是的,結束了與調度更新...謝謝 – Pablo

回答

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