2013-02-24 15 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