2013-02-24 14 views
0

我有我试图重复的序列,并改变延迟时间与重复的每次出现...喜欢的东西:如何动态更改我的CCS序列中的延迟?

__block CCDelayTime *delayTime = [CCDelayTime actionWithDuration:myDelay]; 

[CCRepeat actionWithAction:[CCSequence actions: 
          [CCCallFunc actionWithTarget:self selector:@selector(doSomething)], 
          delayTime, 
          [CCCallBlock actionWithBlock:^{ 
          delayTime.duration = delayTime.duration/2 
         }.... 

我越来越没有地方真正的快速.. Depsite的事实, CCDelayTime的duration_ivar实例实际上正确地设置为其先前值的一半,当单步执行代码时,似乎一旦控制达到诸如step或update之类的基类'(CCActionInterval)方法之一, duration_ivar回到原始值(myDelay设置为什么)。

我花了相当一段时间,通过cocos代码试图弄清楚为什么发生这种情况,但最终决定放弃,看看有没有人可以帮助我。也许有更好的方法来做我想要做的事情呢?

+0

你究竟想在这里做什么?这似乎可能是预定选择器的工作,而不是操作。 – dqhendricks 2013-02-25 17:36:11

回答

0

你在这里做的是:调用一个函数,等待一段时间(延迟),运行一个块来改变已经运行的动作的等待时间。

您需要使用的是CCSpeed,为其添加延迟动作并保留对CCSpeed的引用,以便您可以从以外的修改该序列的速度。

+0

我试过了,但它不起作用---也许我误解了你...我做了:__block CCSpeed * s = [CCSpeed actionWithAction:[CCDelayTime actionWithDuration:0.25f] speed:1];我得到“[CCSpeed持续时间]:无法识别的选择器发送到实例” – patrick 2013-02-24 08:59:02

+0

这是因为CCSpeed没有'持续时间',请改用'speed'属性。虽然我不确定是否可以更改块中的速度,但由于该块在延迟时间操作停止运行后被调用。我猜你也许应该简单地重新创建序列,每次都会有新的延迟。如果这是您的目标:改变每个序列运行的延迟,而不是在序列运行时更改*。在这种情况下,重新创建序列是最简单的方法。 – LearnCocos2D 2013-02-24 20:26:07