2011-12-16 24 views
0

これまでに何千人もの人が尋ねてきたことは知っています。しかし、私の質問はかなり異なっています。スケジューリングされたセレクタをスケジュール解除するだけでなく、実際にスケジューリングするセレクタを一時停止する方法があるのだろうかと思います。 50秒ごとに呼び出されるセレクタがあるので、これを知る必要があります。そのセレクタを2秒残してスケジューリングを解除してから再スケジューリングすると、その関数を呼び出すのに98秒かかります。cocos2dスケジュールセレクタを実際に一時停止する方法は?

答えて

0

あなたは(この場合は自己に、ターゲット)ノードのすべてのセレクタを一時停止し、これを行うことができます:あなたはそれを使用できない場合

[[CCScheduler sharedScheduler] pauseTarget:self]; 

が、あなたは時間のことは自分を追跡する必要があります。

[self scheduleUpdate]; 

が次に更新方法を記述します:

-(void) update:(ccTime)delta 
{ 
    totalTime += delta; 
    if (isSelectorXPaused == YES) 
    { 
     nextUpdateForSelectorX += delta; 
    } 
    else if (totalTime > nextUpdateForSelectorX) 
    { 
     nextUpdateForSelectorX = totalTime + 50; 
     [self performX]; 
    } 
} 

変数TOTALTIME、isSelectorXPausedとnextUpdateForSelectorX

はインスタンス変数ですその場合には、それだけで更新セレクターをスケジュールするために、おそらく最も簡単です。 Xという名前のセレクタが一時停止している場合、次に実行する必要がある時間が経過するまでに単純に進められます。これにより、セレクタが一時停止している間は本質的にtotalTimeとnextUpdateForSelectorXの差が一定に保たれます。

セレクタが一時停止せずに更新が必要な場合、nextUpdateForSelectorXは50秒後に進み、通常のメッセージ送信を使用してセレクタが実行されます。

これは基本的な原則です。これを拡張して複数のセレクタをサポートする必要があります。実際にセレクタを一時停止させたので、変数の初期化は省略されています。それは大きな問題を引き起こしてはいけません。

関連する問題