Methods Cocos2d:在特定的时间间隔多次调用方法

Methods Cocos2d:在特定的时间间隔多次调用方法,methods,time,cocos2d-iphone,scheduled-tasks,call,Methods,Time,Cocos2d Iphone,Scheduled Tasks,Call,我运行了下面的代码,希望以不同的时间间隔(例如,1秒后、2.6秒后等)在方法“displayWarningMessage”上安排三个后续调用,但没有起作用(它仅第一次显示消息) 我在调度程序中找不到一个方法签名,它可以多次显示并具有特定的延迟。有人有什么建议吗 [self scheduleOnce:@selector(displayWarningMessage) delay:0.7f]; [self scheduleOnce:@selector(displayWarningMessage)

我运行了下面的代码,希望以不同的时间间隔(例如,1秒后、2.6秒后等)在方法“displayWarningMessage”上安排三个后续调用,但没有起作用(它仅第一次显示消息)

我在调度程序中找不到一个方法签名,它可以多次显示并具有特定的延迟。有人有什么建议吗

[self scheduleOnce:@selector(displayWarningMessage)  delay:0.7f];
[self scheduleOnce:@selector(displayWarningMessage)  delay:1.7f];
[self scheduleOnce:@selector(displayWarningMessage)  delay:3.7f];

这里的问题是,当您调用first schedule时,它已成功调度。但下一个紧急电话是发出警告

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];
    }
}
现在在选择器中,执行以下操作:

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];
    }
}
-(无效)显示警告消息
{
//把你的东西都放在这里
//增量计数器
计数器++;
如果(计数器<[间隔计数])
{
//在索引计数器/索引处使用对象计划下一次
[self scheduleOnce:@selector(displayWarningMessage)延迟:[(NSNumber*)[Interval objectAtIndex:counter]]floatValue];
}
}
间隔
计数器
当然应该是IVAR类

试试这个:

- (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,而无需单独创建三次。当然,如果需要的话,您也可以将这些延迟变为变量。让我知道进展如何。

方法已创建

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

-(void) displayWarningMessage:(ccTime) delta
{

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

}

使用“未检测到警告消息”中的调用方法。

非常感谢,这是一个好主意,但我尝试了,但没有成功。作为证明,在代码中,u建议我将scheduleOnce的调用替换为注释“Do all your stuff here”下面的所有控件,但它仍然不会调用它。我不确定是我做错了什么。我正在使用COCOS2D2V2.0和ARC启用。目前+1投票支持你的绝妙想法,但我认为答案不可接受,因为没有完全解决问题(但如果没有其他问题,我会接受)。请在代码前使用4个空格将其格式化为代码。