Cocos2d-x之Action(一) ActionManager

ActionManager作为Cocos2d-x中管理所有动作的单例,其内部通过数据结构存储Node的Action信息。它使用哈希结构的tHashElement存储Node的Action数组和执行状态。在Director的update方法中,遍历每个Node的Action并调用step()计算执行进度。当动作完成时,会根据_currentTargetSalvaged和currentActionSalvaged标志进行删除和释放操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ActionManager 是一个管理所有动作的单例,多数情况下会通过node 中的接口来调用而不直接调用ActionManager;那么ActionManager内部封装了哪些内容?首先看看他的数据结构:

ActionManager 用一个结构体用来放一个Node所对应的Action信息:

  • Action信息包括: 该Node要执行的action数组(ccArray ),Node当前正在执行的Action 以及在数组中的索引
  • UT_hash_handle 哈希结构决定了tHashElement可以储存一个target或者多个taget(链式连接)的信息。
typedef struct _hashElement
{
    struct _ccArray     *actions;
    Node                *target;
    int                 actionIndex;
    Action              *currentAction;
    bool                currentActionSalvaged;
    bool                paused;
    UT_hash_handle      hh;
} tHashElement;

那么一个node如何执行action的呢?如下图所示;
在这里插入图片描述
在Director的init()中设置每帧会调用update, 在mainLoop的调度优先级是PRIORITY_SYSTEM; 关于update:

  1. 在update 中对遍历到每个node的每个action;调用step()方法;
    step() : 计算出当前帧的动作执行进度,即一个百分比updateDt;在调用update做出当前帧的更新;

  2. update中会对执行完毕的action和target 进行移除;使用到两个标记变量;_currentTargetSalvaged=false是用来告诉系统,当前target正在执行动作,不能进行移除target;_currentTargetSalvaged为true时执行deleteHashElement;
    currentActionSalvaged则用来暂时保留action而不被release; 动作执行完毕后removeAction再对action执行release

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值