cpp-tests ActionManagerTest

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



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/37773369
void 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值