首页 > 代码库 > 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