cocos2dx学习笔记(三)——动作(CCAction)

来源:互联网 发布:mysql 数据删除操作 编辑:程序博客网 时间:2024/05/01 22:02

       CCAction继承于对象类CCObject,它下面有三个子类:有限时间动作(CCFiniteTimeAction),跟随,移动速度。其中有限动作又分为瞬时动作(CCActionInstanse)和延时动作(CCActionInterval)。具体类结构图如下:




从上面的结构图可以看出,延时动作函数库比瞬时动作函数库更加丰富。延时动作相比于瞬时动作多了一个执行过程,需要一定的时间。

延时动作函数丰富,下面以CCMoveTo和CCMoveBy为例介绍一下动作的用法:

移动精灵,两者的区别在于:CCMoveBy是CCMoveTo的子类。CCMoveTo是移动到指定坐标,CCMoveBy是相对坐标。如ccp(50,50),前者表示移动到x=50,y=50处,后者表示向x方向移动50个单位,向y方向移动50个单位。


CCActionInterval* actionMoveTo = CCMoveTo::actionWithDuration(2,ccp(winSize.width - 30,winSize.height - 30) ); CCActionInterval* actionMoveBy = CCMoveBy::actionWithDuration(1,ccp(-50,-50) );m_Soldier1->runAction(actionMoveTo ); m_Soldier2->runAction( CCSequence::actions(actionMoveTo,actionMoveBy,NULL) ); 

CCSequence是动作序列,把若干个动作按顺序组合在一起,然后依次执行,NULL是结束标志。


函数回调动作

有时候一些动作完成后,需要执行一些数据处理。就需要使用函数回调动作CCCallFunc.根据传人参数不同,回调函数分为CCCallFunc (不含参数),CCCallFuncN (含有CCNode对象),CCCallFuncND (CCNode对象和数据)。

//创建一个CCCallFunc操作

//还要实现回调里的操作,看下面的回调函数funback1

CCCallFunc * back1=CCCallFunc::create(this,callfunc_selector(Actiondemo::funback1));

CCFiniteTimeAction * cq1=CCSequence::create(ac1,back1,NULL);

plan1->runAction(cq1);


//创建一个CCCallFuncN操作

CCCallFuncN * back2=CCCallFuncN::create(this,callfuncN_selector(Actiondemo::funback2));

CCFiniteTimeAction * cq2=CCSequence::create(ac1,back2,NULL);

plan1->runAction(cq2);


//创建一个CCCallFuncND操作

CCCallFuncND * back3=CCCallFuncND::create(this,callfuncND_selector(Actiondemo::funback3),(void *)10);

CCFiniteTimeAction * cq3=CCSequence::create(ac1,back3,NULL);

plan1->runAction(cq3);


回调函数:

void Actiondemo::funback1(){

CCSprite * sp=(CCSprite *)this->getChildByTag(500);

CCActionInterval * rote=CCRotateTo::create(5.0f,180);

sp->runAction(rote);

}

void Actiondemo::funback2(CCNode * node){

CCActionInterval * rote=CCRotateTo::create(5.0f,180);

node->runAction(rote);

}

void Actiondemo::funback3(CCNode * node,void * a){

int num=(int)a; //这里要引用下指针

CCActionInterval * rote=CCRotateTo::create(num,180);

node->runAction(rote);

}


0 0
原创粉丝点击