从长远来看,使用_cmd关键字能为你减少很多痛苦,因为它帮助你避免了很多因为选择器选错方法而带来的可怕问题。
关于调度,还有最后一个问题要提一下,那就是更新方法的优先级。请看以下代码:
// in Node A
-(void) scheduleUpdates
{
[self scheduleUpdate];
}
// in Node B
-(void) scheduleUpdates
{
[self scheduleUpdateWithPriority:1];
}
// in Node C
-(void) scheduleUpdates
{
[self scheduleUpdateWithPriority:-1];
}
看懂这段代码可能要花一点时间。所有节点都在调用“– (void) update:(ccTime)delta”方法。但是因为有了优先级设定,所以节点C中的更新方法是最先被调用的。接下来是调用节点A中的更新方法,因为scheduleUpdate的默认优先级为0。最后是节点B中的更新方法被调用,因为它的优先级最高。更新方法是以优先级从低到高的顺序被调用的。
你可以能心存疑惑,什么时候会用到这个优先级呢?老实说,它确实不常用,以我多年的经验来看,它会在一些比较少见的情况下发挥优势,例如,在物理模拟器发生自动更新前后对某个物理对象施加力的作用。官方文档对于优先级的解释也能证实我的这个观点,因为它也提到了物理更新。有时候,通常是在项目开发后期,你会发现一些因为计时问题导致的奇怪的bug,要解决问题,你必须要在其他所有对象都更新完之后,再对玩家进行更新。
在碰到与更新的优先级相关的问题之前,你可以放心地跳过这段内容。