2012-11-30 36 views
0

我目前的解決方案,在一個對象上調度n次相同的選擇器是通過創建一個「messanger」類的實例數組,其中的屬性我有調用時間和我想調用的選擇器類型加上對象引用應該調用選擇器。Cocos2d:有沒有一種方法來安排n次相同的選擇器?

然後我在父節點類的更新方法中檢查這個數組,其中我添加了所有這些對象。

有沒有辦法通過調度方法做到這一點?

共享導演沒有給我任何幫助。我對我的解決方案非常滿意,但不確定它是否是最好的解決方案。

編輯:我試了答案建議,不幸的是沒有工作。

下面是代碼:

[f schedule:@selector(activateForShort) interval:0 repeat:0 delay:1.0f]; 
    [f schedule:@selector(activateForShort) interval:0 repeat:0 delay:3.0f]; 
    [f schedule:@selector(activateForShort) interval:0 repeat:0 delay:5.0f]; 
    [f schedule:@selector(activateForShort) interval:0 repeat:0 delay:7.0f]; 
    [f schedule:@selector(activateForShort) interval:0 repeat:0 delay:9.0f]; 
    [f schedule:@selector(activateForShort) interval:0 repeat:0 delay:12.0f]; 
    .... 
    [f schedule:@selector(activateForShort) interval:0 repeat:0 delay:152.0f]; 
    [f schedule:@selector(activateForShort) interval:0 repeat:0 delay:177.0f]; 
    [f schedule:@selector(activateForShort) interval:0 repeat:0 delay:199.0f]; 
    [f schedule:@selector(activateForShort) interval:0 repeat:0 delay:212.0f]; 

f是一個對象,它調用選擇 「activateForShort」 只有一次。

我嘗試修改間隔並重復值爲1,但沒有奏效。

我想要實現的是在特定時間調用它(例如1.0f,212.0f)。

任何建議將惠康:)

回答

0

解決方案建議可悲的是沒有工作。請參閱編輯。

我創建了一個特定的動作類,並創造了充滿此類的實例的一個NSMutableArray,並在類的更新方法的地方,我需要安排這些動作我做的:

-(void) update:(ccTime) delta 
{ 
timeElapsed+=delta; 

for(int i=lastButtonCallIndex; i<[callsSchedulers count]; i++) 
{ 
    Call * buttonCall = [callsSchedulers objectAtIndex:i]; 
    if (buttonCall.callingTime<timeElapsed) 
    { 
     if(buttonCall.called==FALSE) 
     { 
      [buttonCall call]; //Where the call method has a reference to the button object I wanted to activate - a Call object is initialized with this reference. 
      lastButtonCallIndex++; 
     } 
    } 
    else 
    { 
     break; 
    } 
}  

}

1

如果你使用了cocos2d 2.0可以使用schedule:interval:repeat:delay方法。

重複參數是選擇器在初始運行後再次運行多少次。也就是說,如果repeat是10,選擇器將運行11次。

延遲參數決定了初始延遲,所以您可以在選擇器第一次運行之前等待更長或更短的時間。

+0

對不起,但我試過,並沒有工作..我編輯與解釋的問題..將再次接受,如果我做錯了:) – mm24

相關問題