首页 > 代码库 > 2假动作,数据缓冲,CCEaseExponential,CCEaseElastic,CCEaseBounce,CCCallFunc,funcNCallBack,funcNDCallBack,funcO

2假动作,数据缓冲,CCEaseExponential,CCEaseElastic,CCEaseBounce,CCCallFunc,funcNCallBack,funcNDCallBack,funcO



1缓冲动作

man->setScale(0.8f);

woman->setScale(0.8f);

man->setPosition(ccp(100, 80));

woman->setPosition(ccp(100,240));

CCMoveTo * manTo = CCMoveTo::create(2, ccp(400,80));

CCMoveTo * womanTo = CCMoveTo::create(2, ccp(400, 240));

CCEaseExponentialIn *in = CCEaseExponentialIn::create(manTo);

CCEaseExponentialOut *out = CCEaseExponentialOut::create(manTo);

CCEaseExponentialInOut * inOut =

CCEaseExponentialInOut::create(manTo);

man->runAction(inOut);

woman->runAction(womanTo);

CCEaseElasticIn *in = CCEaseElasticIn::create(manTo);

CCEaseElasticOut *out = CCEaseElasticOut::create(manTo);

CCEaseElasticInOut * inOut = CCEaseElasticInOut::create(manTo);

#include"T13Action.h"

#include"AppMacros.h"

 

CCScene *T13Action::scene()

{

   CCScene *scene =CCScene::create();

   T13Action *layer =T13Action::create();

   scene->addChild(layer);

   returnscene;

}

 

boolT13Action::init()

{

   TBack::init();

 

   CCSprite *man =CCSprite::create("man.png");

   CCSprite *woman =CCSprite::create("woman.png");

   man->setPosition(ccp(100, 160));

 

   CCMoveBy *by = CCMoveBy::create(2,ccp(300,0));

   CCMoveBy *by2 = CCMoveBy::create(2,ccp(300,0));

   

   CCEaseExponentialIn * in =CCEaseExponentialIn::create(by2);

   CCEaseExponentialInOut * out =CCEaseExponentialInOut::create(by2);

   CCEaseExponentialInOut *inOut =CCEaseExponentialInOut::create(by2);

 

//CCEaseElasticIn * in = CCEaseElasticIn::create(by2);

   //CCEaseElasticOut * out = CCEaseElasticOut::create(by2);

   //CCEaseElasticInOut * inOut = CCEaseElasticInOut::create(by2);

 

   //CCEaseBounceIn *in = CCEaseBounceIn::create(by2);

   //CCEaseBounceOut * out = CCEaseBounceOut::create(by2);

   //CCEaseBounceInOut * inOut = CCEaseBounceInOut::create(by2);

 

   //看精灵的运行速度

   //man->runAction(in);

   //man->runAction(out);

   man->runAction(inOut);

 

   addChild(man);

   returntrue;

}

 

//原生绘图,每一帧都会绘图

voidT13Action::draw()

{

   CCPointArray *array =CCPointArray::create(6);

   

   array->addControlPoint(ccp(100, 160));

   array->addControlPoint(ccp(200, 160));

   array->addControlPoint(ccp(200, 250));

   array->addControlPoint(ccp(300, 250));

   array->addControlPoint(ccp(300, 160));

   array->addControlPoint(ccp(450, 160));

 

   ccDrawCardinalSpline(array, 1, 100);

}

运行结果:

2并行动作和序列动作

CCSequence中持续时间为所有动作累计的总合,CCSequence中不可以

CCRepeatForever动作。

   CCSpwan中持续时间为并行动作持续时间最长的决定。

3假动作

   CCCallFunc系列动作包括CCallFunc()CCCallFuncN()CCCallFuncND,以及CCCallFuncO四个动作,CCCallFunc系列动作的后缀”N”表示Node参数,指的是执行动作的对象,”D”表示Data参数,指的是用户自定义的数据,”O”表示对象,指的是一个用户自定义的CCObject参数。在不同的情况下,我们可以根据不同的需求来选择不同的CCCallFunc动作。

typedef void (CCObject::*SEL_CallFunc)();

//无参类型

typedef void (CCObject::*SEL_CallFuncN)(CCNode*);

//传递CCNode *类型变量

typedef void (CCObject::*SEL_CallFuncND)(CCNode*, void*);

//传递CCNode *类型变量,和无类型变量

typedef void (CCObject::*SEL_CallFuncO)(CCObject*);

//传递CCObject *类型变量

#define callfunc_selector(_SELECTOR) (SEL_CallFunc)(&_SELECTOR)

#define callfuncN_selector(_SELECTOR) (SEL_CallFuncN)(&_SELECTOR)

#define callfuncND_selector(_SELECTOR) (SEL_CallFuncND)(&_SELECTOR)

#define callfuncO_selector(_SELECTOR) (SEL_CallFuncO)(&_SELECTOR)

CCCallFunc * func = CCCallFunc::create(this,

callfunc_selector(T13Action::funcCallBack));

CCCallFuncN * func = CCCallFuncN::create(this,

callfuncN_selector(T13Action::funcNCallBack));

CCCallFuncND * func = CCCallFuncND::create(this,

callfuncND_selector(T13Action::funcNDCallBack), (void *)"30");

CCArray * array = CCArray::create();

array->addObject(woman);

CCCallFuncO * func = CCCallFuncO::create(this,

callfuncO_selector(T13Action::funcOCallBack),(CCObject*)array);

CCSequence * seq = CCSequence::create(to, func, NULL);

man->runAction(seq);

addChild(man);

案例说明:

无参的假动作

voidfuncCallBack();

T13Action.h

#ifndef_T13Action_H__

#define_T13Action_H__

#include"cocos2d.h"

#include"TBack.h"

USING_NS_CC;

classT13Action :publicTBack

{

public:

   staticCCScene *scene();

   CREATE_FUNC(T13Action);

   boolinit();

 

   voiddraw();

 

   //无参的假动作

   voidfuncCallBack();

   //带调用者的假动作

   voidfuncNCallBack(CCNode * node);

   //带有调用者和数据的假动作

   voidfuncNDCallBack(CCNode * node,void *data);

   //带有对象的假动作

   voidfuncOCallBack(CCObject * obj);

};

 

#endif

T13Action.cpp

#include"T13Action.h"

#include"AppMacros.h"

 

CCScene *T13Action::scene()

{

   CCScene *scene =CCScene::create();

   T13Action *layer =T13Action::create();

   scene->addChild(layer);

   returnscene;

}

 

boolT13Action::init()

{

   TBack::init();

 

   CCSprite *man =CCSprite::create("man.png");

   CCSprite *woman =CCSprite::create("woman.png");

   man->setPosition(ccp(100, 160));

 

   CCMoveBy *by2 = CCMoveBy::create(2,ccp(300, 0));

   //假动作就是当一个动作执行完了之后又执行的一个动作

   CCCallFunc *func =CCCallFunc::create(this,callfunc_selector(T13Action::funcCallBack));

   CCSequence *seq =CCSequence::create(by2,func,NULL);

 

   man->runAction(seq);

   addChild(man);

   returntrue;

}

 

//原生绘图,每一帧都会绘图

voidT13Action::draw()

{

   CCPointArray *array =CCPointArray::create(6);

   

   array->addControlPoint(ccp(100, 160));

   array->addControlPoint(ccp(200, 160));

   array->addControlPoint(ccp(200, 250));

   array->addControlPoint(ccp(300, 250));

   array->addControlPoint(ccp(300, 160));

   array->addControlPoint(ccp(450, 160));

 

   ccDrawCardinalSpline(array, 1, 100);

}

 

//无参的假动作

voidT13Action::funcCallBack() {

   CCLog("action is over");

}

运行结果(运行速度是变速的):

输出结果:

4假动作

#ifndef_T13Action_H__

#define_T13Action_H__

#include"cocos2d.h"

#include"TBack.h"

USING_NS_CC;

classT13Action :publicTBack

{

public:

   staticCCScene *scene();

   CREATE_FUNC(T13Action);

   boolinit();

 

   //无参的假动作

   voidfuncCallBack();

   //带调用者的假动作

   voidfuncNCallBack(CCNode * node);

   //带有调用者和数据的假动作

   voidfuncNDCallBack(CCNode * node,void *data);

   //带有对象的假动作

   voidfuncOCallBack(CCObject * obj);

};

#endif

#include"T13Action.h"

#include"AppMacros.h"

 

CCScene *T13Action::scene()

{

   CCScene *scene =CCScene::create();

   T13Action *layer =T13Action::create();

   scene->addChild(layer);

   returnscene;

}

 

boolT13Action::init()

{

   TBack::init();

 

   CCSprite *man =CCSprite::create("man.png");

   CCSprite *woman =CCSprite::create("woman.png");

   man->setPosition(ccp(50, 160));

   woman->setPosition(ccp(50,260));

 

 

   //创建一个CCArray,在使用前调用retain(),要注意的是在最后退出之

   //后要在onExit()中将array进行release()

   CCArray * array =CCArray::create();

   array->retain();

   array->addObject(woman);

 

   CCMoveBy *by2 = CCMoveBy::create(2,ccp(300, 0));

   CCCallFuncN *funcN =CCCallFuncN::create(this,

       callfuncN_selector(T13Action::funcNCallBack));

 

   //调用

   CCCallFuncND *funcND = CCCallFuncND::create(this,

       callfuncND_selector(T13Action::funcNDCallBack),

       (void*)"30");

   CCCallFuncO * funcO =CCCallFuncO::create(this,

       callfuncO_selector(T13Action::funcOCallBack),

       array);

 

   CCSequence *seq =CCSequence::create(by2,funcO,NULL);

 

   man->runAction(seq);

   addChild(man);

   returntrue;

}

 

//其中CCNode表示的是动作的执行者

voidT13Action::funcNCallBack(CCNode *node)

{

   CCSprite *spr = (CCSprite *)node;

   //将精灵从屏幕上

   //spr->removeFromParentAndCleanup(true);

   CCJumpBy *by =CCJumpBy::create(2,ccp(0,0),100,1);

   spr->runAction(by);

}

 

voidT13Action::funcNDCallBack(CCNode * node,void *data)

{

   CCSprite *spr = (CCSprite *)node;

   //下面是取出数据的代码

   CCString *str =CCString::createWithFormat("%s", (char*)data);

   //给精灵旋转

   spr->setRotation(str->floatValue());

}

 

void T13Action::funcOCallBack(CCObject * obj)

{

   CCArray * array = (CCArray*)obj;

   //array中取出第0个元素

   CCSprite *spr = (CCSprite*)array->objectAtIndex(0);

   addChild(spr);

}

 

 

 

 

 

2假动作,数据缓冲,CCEaseExponential,CCEaseElastic,CCEaseBounce,CCCallFunc,funcNCallBack,funcNDCallBack,funcO