我运行以下代码,期望在方法“ displayWarningMessage ”上以不同的时间间隔(例如,在1秒后,在2.6秒等之后)安排三个后续调用但是不起作用(它仅在第一次显示按摩)。
我没有在调度程序中找到一个方法签名,它可以多次显示它并具有特定的延迟。有人有什么建议吗?
[self scheduleOnce:@selector(displayWarningMessage) delay:0.7f];
[self scheduleOnce:@selector(displayWarningMessage) delay:1.7f];
[self scheduleOnce:@selector(displayWarningMessage) delay:3.7f];
答案 0 :(得分:1)
问题在于,当您拨打第一个时间表时,它已成功安排。但下一个立即电话会发出警告
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
应该是课程类别。
答案 1 :(得分:0)
试试这个:
- (void)displayWarningMessage {
//Stuff
}
- (void)callStuff {
CCCallFunc *call = [CCCallFunc actionWithTarget:self selector:@selector(displayWarningMessage)];
CCDelayTime *delay1 = [CCDelayTime actionWithDuration:0.7f];
CCDelayTime *delay2 = [CCDelayTime actionWithDuration:1.7f];
CCDelayTime *delay3 = [CCDelayTime actionWithDuration:3.7f];
CCSequence *actionToRun = [CCSequence actions:delay1, call, delay2, call, delay3, call, nil];
[self runAction:actionToRun];
}
这应该适用于你想要做的事情,至少我想象的是这样做。我很确定你可以在一个CCSequence中多次调用CCCallFunc,而不必每次创建它三次。当然,如果需要,你也可以根据需要改变这些延迟。让我知道它是怎么回事。
答案 2 :(得分:-1)
创建了方法。
[self schedule: @selector(displayWarningMessage:) interval:3.2f];
-(void) displayWarningMessage:(ccTime) delta
{
CCLOG(@"alert........!!!!!!");
}
在未检测到警告消息时使用“呼叫”方法。