cpp-tests ActionManagerTest

来源:互联网 发布:painter下载mac 编辑:程序博客网 时间:2024/05/16 17:24

~~~~我的生活,我的点点滴滴!!



ActionManagerTest例子里面包括了好几种小例子,不过他们大体是差不多的,都是精灵利用action去展示一些动作,下面我效果图:




这个文件里面包括了好几个类,基本主控制框架一样,这里我们不讲解,我们就拿第一个旋转作为分析例子,看下面源码:


//------------------------------------------------------------------//// ActionManagerTest////------------------------------------------------------------------void ActionManagerTest::restartCallback(Ref* sender){    auto s = new ActionManagerTestScene();    s->addChild(restartActionManagerAction()); //replaceScene替换时会删掉上一次的场景,对比pushScene()与popScene()//看代码里面是递归删除所有子节点并释放    Director::getInstance()->replaceScene(s);    s->release();}//对于onEnter()的介绍及与init()等区别见http://blog.csdn.net/ac_huang/article/details/37773369void CrashTest::onEnter(){//必须先调用父类的    ActionManagerTest::onEnter();    auto child = Sprite::create(s_pathGrossini);    child->setPosition( VisibleRect::center() );    addChild(child, 1);    //1.5s旋转90度    child->runAction(RotateBy::create(1.5f, 90));//DelayTime 表示空白,什么也不做 详见http://blog.csdn.net/ac_huang/article/details/37972017    child->runAction(Sequence::create(                                            DelayTime::create(1.4f),                                            FadeOut::create(1.1f),                                            nullptr)                    );        runAction( Sequence::create(                                    DelayTime::create(1.4f),                                    CallFunc::create( CC_CALLBACK_0(CrashTest::removeThis,this)),                                    nullptr)             );}

    初看上面,我觉得runAction()动作他是依次执行,即先花费1.5s旋转,然后在花1.4s等待,最后花费1.1淡出屏幕,但是其实不是这样的,

runAction()虽看上去他们有先后执行的顺序,其实代码执行到这时,他们都没有执行,他们都是在帧刷新的时候一起执行的(但是runAction

里面的Sequence是有先后顺序的,他为动作序列,想当然会有),那也就意味着1.5s在旋转的时候,后面1.4s的等待同时在进行,然后才是1.1s

的淡出,后面又有一个回调函数去做删除操作,做打断了前面的操作,也就是说runAction()是同时执行的,能强行打断操作,如果把第三个

runAction()里面的等待时间改成2.5s(为什么是2.5s?1.5s做完旋转时淡出运行已经运行了0.1s,所以在只需要1s就能看到淡出完成,所以

是2.5s)就能看到一个完整的过程了。



最后看一下删除,其他的是都是类似的,就不说了。


void CrashTest::removeThis(){//删除自己,包括释放掉内存,有可能不会立即释放,因为内存管理机制是用引用计数的    _parent->removeChild(this, true);        nextCallback(this);}


注释在代码里面,含有有一些链接,是对于使用此API接口的简单说明,便于理解!



0 0
原创粉丝点击