Cocos2d-x scheduleUpdate方法执行顺序对update方法执行顺序的影响

Cocos2d-x的scheduleUpdate方法用于在每帧调用Node的update方法,但其调用顺序对update执行顺序有直接影响。通过源码分析发现,scheduleUpdate创建的优先级0定时器在统一队列中,按照添加顺序执行。先调用scheduleUpdate的节点,其update方法会在同一帧优先执行。理解这一机制有助于避免游戏逻辑中的bug。
摘要由CSDN通过智能技术生成

对Node执行scheduleUpdate方法能让节点在每帧执行一遍自己的update方法,非常方便。

但是我们在大量地使用scheduleUpdate方法时,会常常忽视使用scheduleUpdate的顺序对每个update最终被调用顺序的影响,而不同的顺序与最终游戏的逻辑息息相关,一旦顺序不对很容易出现bug。

阅读源码可知,scheduleUpdate实际上是加了一个优先级为0的定时器。

void Node::scheduleUpdate()
{
    scheduleUpdateWithPriority(0);
}

再看Scheduler,优先级0的定时器在同一个队列里,在update方法执行每个定时器时,会遍历优先级0的队列。

    // updates with priority == 0
    DL_FOREACH_SAFE(_updates0List, entry, tmp)
    {
        if ((! entry->paused) && (! entry->markedForDeletion))
        {
            entry->callback(dt);
        }
    }

宏实际上是一个for循环的头。从_updates0List的头开始一个个地遍历,执行每一个update方法。

for((el)=(head);(el) && (tmp = (el)->next, 1); (el) = tmp)

回到scheduleUpdate,使用了appendIn方法插入节点的update回调。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

潮潮潮潮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值