3.5.3 消息调度
节点可以对消息进行调度,其实就是指Objective-C中每隔一段时间调用一次方法。很多情况下,你可能想对一个节点采用特定的更新方法来进行某个操作,例如碰撞检测。要使特定的更新方法以每帧的频率被调用一次,最简单的做法如下所示:
-(void) scheduleUpdates
{
[selfscheduleUpdate];
}
-(void) update:(ccTime)delta
{
// this method is called every frame
}
非常简单吧?注意,更新方法是有固定格式的,也就是说,它永远是像示例代码这样定义的。参数delta代表了该函数自上次被调用到现在所经过的时间。如果希望每帧调用一次更新方法,以上示例是一个比较好的做法。但是如果想要有更好高的灵活性,最好还是采用其他更新方法。
如果想调用另一个方法,或者不想以每帧的频率(而是以每0.1秒的频率)调用该方法,就应该采用以下做法:
-(void) scheduleUpdates
{
[self schedule:@selector(updateTenTimesPerSecond:)interval:0.1f];
}
-(void) updateTenTimesPerSecond:(ccTime)delta
{
// this method is called according to its interval, ten times per second
}
注意,如果interval的值为0,还是应该用scheduleUpdate方法。但是,假如你之后需要取消对一个定时方法的调用,最好还是采取上面的做法,因为scheduleUpdate方法做不到这一点。
这里的更新方法在格式上和原来一样,还是只有一个参数“delta”。与之前有所不同的是,该更新方法的名称可以根据你的喜好来修改,而且它以0.1秒的频率被调用。例如,当游戏逻辑复杂到你不想以每帧的频率去检测玩家是否胜出时,就可以采用这种做法。假如希望在10分钟后调用某方法,可以用选择器选定你的更新方法,并把interval设定为600。