cocos2d开发之定时消息(scheduleUpdate)

来源:互联网 发布:windows 任务计划程序 编辑:程序博客网 时间:2024/05/17 09:34
每帧执行一次
-(void) scheduleUpdates{       [self scheduleUpdate];}-(void) update:(ccTime)delta{// 此方法每一帧都会被调用}


每秒执行10次

-(void) scheduleUpdates{       [self schedule:@selector(updateTenTimesPerSecond:) interval:0.1f];}-(void) updateTenTimesPerSecond:(ccTime)delta{// 此方法将根据时间间隔来调用,每秒10次}

如果你想之后停止对某个指定更新方法的定时信息的话,上述代码更加合适。因为scheduleUpdate方法没有停止定时信息的功能。 


以下代码会停止节点的所有选择器,包括那些已经在scheduleUpdate里面设置了预定的选择器:

[self unscheduleAllSelectors];

以下代码会停止某个指定的选择器(假设选择器名称是updateTenTimesPerSecond):

[self unschedule:@selector(updateTenTimesPerSecond:)]; 

注:此方法不会停止scheduleUpdate中设置的预定更新方法   


预定的控制器只运行一次:

-(void) scheduleUpdates{       [self schedule:@selector(tenMinutesElapsed:) interval:600];}-(void) tenMinutesElapsed:(ccTime)delta{   [self unschedule:_cmd];} 

_cmd关键词是当前方法的缩写。上述代码只会让tenMinutesElapsed方法运行一次。实际上你也可以用_cmd来设置方法调用的预定。假设你需要调用一个方法,这个方法会使用不同的时间间隔来调用,每次方法被调用以后,时间间隔都会发生变化。你的代码看起来会是像下面这样: 

-(void) scheduleUpdates {// 像之前一样预定第一次更新[self schedule:@selector(irregularUpdate:) interval:1]; }-(void) irregularUpdate:(ccTime)delta {// 首先,停止方法调用的预定 [self unschedule:_cmd];// 这里我们用随机数来决定下次调用此方法需要经过的时间 float nextUpdate = CCRANDOM_0_1() * 10;// 然后用_cmd来代替选择器,用新的时间间隔来重新预定方法调用[self schedule:_cmd interval:nextUpdate]; }

用_cmd关键词可以让你避免预定(schedule)或者停止预定(unschedule)错误的方法。从长期来说是很有好处的。

最后一个预定方法调用的问题是安排更新方法的优先次序。请先看一下以下代码:

  
// 在A节点里-(void) scheduleUpdates{[self scheduleUpdate];}// 在B节点里-(void) scheduleUpdates {[self scheduleUpdateWithPriority:1]; }// 在C节点里-(void) scheduleUpdates {[self scheduleUpdateWithPriority:-1]; }


所有的节点还是在调用同样的-(void)update:(ccTime) delta方法。但是因为使用了优先级设置,C节点将会被首先运行。然后是调用A节点,因为默认情况下优先级设定为0。B节点最后一个被调用,因为它的优先级的数值最大。更新方法的调用次序是从最小的优先级数值到最大的优先级数值(优先级为C>A>B) 。 

原创粉丝点击