今天看啥
热点:

cocos2dx3.2 学习笔记(2)--ActionManagerTest


前面看完了 CppTests的基本框架及流程,现在准备看看具体的每个Test了

从哪里开始看呢。额,就第一个吧(ActionManagerTest)

首先看看效果吧,运行了下,发现有几种效果。看不出什么名堂,感觉有点奇怪。

打开代码先看看头文件,发现原来不是一个类 ,是几个类都放在了这里,都是ActionManagerTest的 估计就是几种效果吧,方法也都没几个,不难发现,基本前面两个方法都一

样,只有第三个方法不一样。去cpp文件看看情况,先定义了一个枚举,不知道干嘛的,然后是声明了三个函数,看名字大概猜到是什么了。

直接贴代码打注释好了

Layer* nextActionManagerAction(); --下一个动作
Layer* backActionManagerAction(); --上一个动作
Layer* restartActionManagerAction();--重置动作

static int sceneIdx = -1; 然后是定义了一个索引

#define MAX_LAYER 5 定义了最大层数

根据索引创建具体的layer

Layer* createActionManagerLayer(int nIndex)
{

//我学的时候直接在这里返回某个具体layer,一个个看到底什么效果return new CrashTest();
switch(nIndex)
{
case 0: return new CrashTest();
case 1: return new LogicTest();
case 2: return new PauseTest();
case 3: return new StopActionTest();
case 4: return new ResumeTest();
}

return nullptr;
}

下一个动作按钮回调,改变索引

Layer* nextActionManagerAction()
{
sceneIdx++;
sceneIdx = sceneIdx % MAX_LAYER;

auto layer = createActionManagerLayer(sceneIdx);
layer->autorelease();

return layer;
}

上一个动作按钮回调,改变索引

Layer* backActionManagerAction()
{
sceneIdx--;
int total = MAX_LAYER;
if( sceneIdx < 0 )
sceneIdx += total;

auto layer = createActionManagerLayer(sceneIdx);
layer->autorelease();

return layer;
}

重置当前动作

Layer* restartActionManagerAction()
{
auto layer = createActionManagerLayer(sceneIdx);
layer->autorelease();

return layer;
}

同样, 我首先看到是第一个CrashTest();

auto child = Sprite::create(s_pathGrossini); //创建一张精灵
child->setPosition( VisibleRect::center() ); //设置到中间
addChild(child, 1);//添加到当前layer

//Sum of all action's duration is 1.5 second.
child->runAction(RotateBy::create(1.5f, 90)); //RotateBy这个函数从名字上可以了解到 是做旋转,(1.5秒内旋转90度)
child->runAction(Sequence::create( //Sequence这个函数一下子没看明白,英文意思是动作序列,那应该是一个个动作
DelayTime::create(1.4f), //先是一个等待动作1.4秒
FadeOut::create(1.1f), //1.1秒淡入
nullptr)
);

//After 1.5 second, self will be removed.
runAction( Sequence::create(
DelayTime::create(1.4f), //先是一个等待动作1.4秒
CallFunc::create( CC_CALLBACK_0(CrashTest::removeThis,this)),//执行一个回调
nullptr)

看代码我以为是 一张精灵旋转90度后,等待1.4秒 然后淡入,然后等待1.4秒,然后执行回调

结果事实并不是这样的,我把代码注释掉 一个个动作执行,后来发现 三个runAction是一起执行的

也就是先1.5秒的旋转同时在1.4秒的等待,到了1.5秒的时候,应该买没旋转到90度,然后要执行淡入了,也发现要执行回调了,结果直接就执行到了回调

说明动作是同时执行的,并且会打断上一个动作。我觉得示例代码可以把第三个runAction 的等待时间改成2.5秒 这样就可以看到一个完整过程了,第二个runAction,已经可以看出动作会别打断的效果了。应该是我没看懂作者的原意。

就剩下个回调了removeThis

void CrashTest::removeThis()
{
_parent->removeChild(this, true); --把自己删除掉

nextCallback(this); --创建下一个layer
}

www.bkjia.comtruehttp://www.bkjia.com/qtjc/863905.htmlTechArticlecocos2dx3.2 学习笔记(2)--ActionManagerTest 前面看完了 CppTests的基本框架及流程,现在准备看看具体的每个Test了 从哪里开始看呢。额,就第一个吧...

相关文章

相关搜索: 笔记

帮客评论

视觉看点