0

我运行以下代码,期望在方法“ 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];
4

3 回答 3

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当然应该是类counterivars。

于 2012-07-19T11:04:47.413 回答
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,而无需单独创建三次。当然,如果需要,您也可以根据需要使这些延迟可变。让我知道事情的后续。

于 2012-07-20T01:36:35.163 回答
-1

方法被创建。

[self schedule: @selector(displayWarningMessage:) interval:3.2f];

-(void) displayWarningMessage:(ccTime) delta
{

    CCLOG(@"alert........!!!!!!");

}

在未检测到警告消息中使用调用方法。

于 2016-01-08T12:54:39.803 回答