Cocos2d:麻烦调度在特定时间间隔多次调用方法

时间:2012-07-19 10:41:35

标签: methods time cocos2d-iphone scheduled-tasks call

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

3 个答案:

答案 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];
    }
}

intervalscounter应该是课程类别。

答案 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........!!!!!!");

}

在未检测到警告消息时使用“呼叫”方法。