动作的克隆

    为什么要使用 clone() 方法? 因为当 Action 对象运行时会产生一个内部状态,记录着节点属性的改变。当你想将一个创建的动作,重复使用到不同的节点对象时,如果不用 clone() 方法,就无法确定这个动作的属性到底是怎样的(因为被使用过,产生了内部状态),这会造成难以预料的结果。

    我们来看示例,假如你有一个坐标位置是 (0,0)heroSprite,执行这样一个动作:

    从代码中学习用法吧,先看看错误的情况:

    使用 clone() 的正确情况:

    倒转使用起来很简单:

    思考下面这段代码在执行的时候, 内部发生了什么?

    • mySprite 创建
    • mySprite 的坐标位置设置成(50,56)
    • sequence 开始执行
    • sequence 执行第二个动作, 暂停 2s
    • sequence 执行第三个动作,,2s 中 mySprite 放大了2倍
    • sequence 执行第四个动作,delaySequence,暂停 6s
    • reverse() 被调用,序列倒转,开始反向执行
    • sequence 执行第三个动作,scaleBy,2s 中 mySprite 缩小了2倍 (注意:序列内的动作被倒转)
    • sequence 执行第二个动作, 暂停 2s
    • sequence 执行第一个动作 moveBy,2s 中 mySprite 从坐标位置 (550,56),移动到了 (50, 56)
    • mySprite 回到了最初的位置我们能发现 方法使用起来很简单,内部逻辑却一点都不简单。因为 Cocos2d-x 封装了复杂的逻辑,为你留下了简单易用的接口!