ここでの問題は、最初のスケジュールを呼び出すと、正常にスケジュールされることです。しかし、次の即時呼び出しは警告をスローしています
CCScheduler#scheduleSelector. Selector already scheduled. Updating interval from: X.2 to X.2
これはログで確認できます。
できることは、セレクターが呼び出されたときです。メソッドの最後で、完了するまで、次回のために再度スケジュールすることができます。呼び出された回数を追跡するためにカウンターを取得し、すべての間隔を配列に入れてから、カウンターによって識別される特定のインデックスで間隔の次のセレクターをスケジュールすることができます。このような:
NSArray *intervals = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.7],[NSNumber numberWithFloat:1.7],[NSNumber numberWithFloat:3.7], nil];
int counter = 0;
//schedule it for the first time with object at index counter/index 0
[self scheduleOnce:@selector(displayWarningMessage) delay:[(NSNumber *)[intervals objectAtIndex:counter]] floatValue];
セレクターで、次のようにします。
-(void)displayWarningMessage
{
//do all your stuff here
//increment counter
counter ++;
if(counter < [intervals count])
{
//schedule it for the next time with object at index counter/index
[self scheduleOnce:@selector(displayWarningMessage) delay:[(NSNumber *)[intervals objectAtIndex:counter]] floatValue];
}
}
intervals
counter
もちろん、クラス ivar である必要があります。