cocos代码研究(7)即时动作子类学习笔记

时间:2024-06-09 09:07:02

理论部分

即时动作是会立即被执行的动作。他们没有持续时间动作(ActionInterval)的持续时间属性。
继承自 FiniteTimeAction。被 CallFunc, FlipX, FlipY, Hide, Place, RemoveSelf, ReuseGrid, Show, StopGrid , 以及 ToggleVisibility 继承。

  • FlipX,FlipX可以立即水平翻转一个精灵。
  • FlipY,FlipY可以立即垂直翻转一个精灵。
  • Hide,隐藏动作用来立即隐藏一个节点。
  • Show,显示动作用来立即显示一个节点
  • Place,Place动作可以将节点放置在特定位置。
  • RemoveSelf,RemoveSelf动作用来删除执行动作的节点。
  • ReuseGrid,ReuseGrid重新使用网格动作。
  • ReuseGrid,StopGrid结束当前网格动作,将其移除。
  • ToggleVisibility,ToggleVisibility动作用来切换一个节点的可见性。
  • CallFunc调用一个回调函数。

代码部分

CallFunc类API

static CallFunc* create (const std::function< void()> & func) //func 需要被执行的回调函数。
用一个回调函数创建CallFunc动作,回调函数的类型是std::function<void()>。 这是创建回调函数的首选方法。 这个API绑定在js或lua中,输入参数会被改变。 lua: local create(local funcID)。

static CallFunc* create (Ref * target, SEL_CallFunc selector)
用下面的函数类型创建CallFunc动作 typedef void (Ref::*SEL_CallFunc)()。

virtual void execute ()
执行回调。

Ref * getTargetCallback ()
获取回调函数的执行主体。

void setTargetCallback (Ref *sel)
设置回调函数的执行主体。

CallFuncN类

CallFuncN类继承自CallFunc,使用节点作为第一个参数调用回调函数的CallFuncN动作,N代表节点。

static CallFuncN * create (const std::function< void(Node *)> &func)
用一个回调函数创建CallFunc动作,回调函数的类型是std::function<void()>。 这是创建回调的首选方法。

实例:

CallFuncN::create(CC_CALLBACK_1(CallFuncNTest1::onCallBackFunc, this))

static CallFuncN * create (Ref *target, SEL_CallFuncN selector)
用下面的方法创建CallFuncN动作。 typedef void (Ref::SEL_CallFuncN)(Node)。

实例:

auto action = CallFuncN::create(this, SEL_CallFuncN(CallFuncNTest::onCallBackFunc))

FlipX类API
static FlipX* create(bool x) //x 如果为true则水平翻转精灵,值为false时则恢复精灵原始状态。

实例:

auto action = FlipX::create(true);

FlipY类API
static FlipY * create(bool y) //y 如果为true则垂直翻转精灵,值为false时则恢复精灵原始状态。

实例:

auto action = FlipY::create(true)

Hide类API
static Hide* create()

实例:

auto hide = Hide::create();

Show类API
static Show* create()

实例:

auto show = Show::create();

Place类API
static Place * create (const Vec2 &pos) //pos 位置坐标

实例:

auto place = Place::create(Vec2(,));

ToggleVisibility类API
static ToggleVisibility* create() //
实例:

auto move1 = MoveBy::create(, Vec2(,));
auto move2 = MoveBy::create(, Vec2(,));
auto tog1 = ToggleVisibility::create();
auto tog2 = ToggleVisibility::create();
auto seq = Sequence::create( move1, tog1, move2, tog2, move1->reverse(), nullptr);
auto action = Repeat::create(Sequence::create( seq, seq->reverse(), nullptr), );

RemoveSelf类API

static RemoveSelf * create (bool isNeedCleanUp=true) //isNeedCleanUp 是否需要清理,默认值是true。

实例:

    auto action = Sequence::create(
MoveBy::create( , Vec2(,)),
RotateBy::create( , ),
ScaleTo::create(,0.1f),
RemoveSelf::create(),
nullptr); _grossini->runAction(action);