cocos2d-x 4.0 学习之路(十三)动作复制和反转(Clone和Reverse)

Clone

克隆,字面意思很好理解,就是他可以复制一个Node,包括动作精灵等。
关键问题是,我们为什么要用Clone?单单是用起来简单,避免重复定义相同的动作吗?当然不是。举个例子,有两个精灵,想让他们有同样的动作,当然可以写一个动作,然后分别加到两个精灵的runAction。那么我们看一下执行效果呢?

auto moveBy = MoveBy::create(5, Vec2(400, 100));
sprite1->runAction(moveBy);
sprite2->runAction(moveBy);

在这里插入图片描述
奇怪的效果发生了。这是因为Action都有着一个内部状态(Internal State)在管理它。运行精灵的时候,就会改变动作对象的属性,这样会导致每个精灵并不是拥有唯一的一个动作。也可以理解为动作相互干扰。

那么,Clone就是为了解决这个问题的。Clone会拷贝出一个一模一样的动作,这样两个精灵各自用各自的,互不干扰。

auto moveBy = MoveBy::create(5, Vec2(400, 100));
sprite1->runAction(moveBy);
sprite2->runAction(moveBy->clone());

在这里插入图片描述

Reverse

动作反转。这个也很好理解,就是可以把你做的Sequence倒过来执行。
那我们看下面的代码。

    auto moveBy = MoveBy::create(2.0f, Vec2(500, 0));
    auto scaleBy = ScaleBy::create(2.0f, 2.0f);
    auto delay = DelayTime::create(2.0f);
    auto delaySequence = Sequence::create(delay, delay->clone(), delay->clone(), delay->clone(), nullptr);
    auto sequence = Sequence::create(moveBy, delay, scaleBy, delaySequence, nullptr);
    sprite1->runAction(sequence);
    sprite1->runAction(sequence->reverse());

在这里插入图片描述
它执行的效果是:
向右移动500,停1秒,精灵扩大2倍,停1秒;(反转)缩小2倍,停1秒,向左移动500。(回到原点)
那么,代码中的delaySequence是干嘛用的呢?提示一下,那两个runAction是同步执行的哦~ 再不明白可以留言或者私信我。

发布了104 篇原创文章 · 获赞 8 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/sunnyboychina/article/details/105308744