cocos2d开发之定时消息(scheduleUpdate)

每帧执行一次
-(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)  。 



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值