2假动作,数据缓冲,CCEaseExponential,CCEaseElastic,CCEaseBounce,CCCallFunc,funcNCallBack,funcNDCallBack,funcO
1 緩沖動(dòng)作
| 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); ??? return scene; } ? bool T13Action::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); ? ??? //看精靈的運(yùn)行速度 ??? //man->runAction(in); ??? //man->runAction(out); ??? man->runAction(inOut); ? ??? addChild(man); ??? return true; } ? //原生繪圖,每一幀都會(huì)繪圖 void T13Action::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); } |
| 運(yùn)行結(jié)果:
|
2 并行動(dòng)作和序列動(dòng)作
CCSequence 中持續(xù)時(shí)間為所有動(dòng)作累計(jì)的總合,CCSequence 中不可以
有CCRepeatForever 動(dòng)作。
???CCSpwan中持續(xù)時(shí)間為并行動(dòng)作持續(xù)時(shí)間最長(zhǎng)的決定。
3 假動(dòng)作
???CCCallFunc系列動(dòng)作包括CCallFunc()、CCCallFuncN()、CCCallFuncND,以及CCCallFuncO四個(gè)動(dòng)作,CCCallFunc系列動(dòng)作的后綴”N”表示Node參數(shù),指的是執(zhí)行動(dòng)作的對(duì)象,”D”表示Data參數(shù),指的是用戶(hù)自定義的數(shù)據(jù),”O(jiān)”表示對(duì)象,指的是一個(gè)用戶(hù)自定義的CCObject參數(shù)。在不同的情況下,我們可以根據(jù)不同的需求來(lái)選擇不同的CCCallFunc動(dòng)作。
| typedef void (CCObject::*SEL_CallFunc)(); |
| //無(wú)參類(lèi)型 typedef void (CCObject::*SEL_CallFuncN)(CCNode*); //傳遞CCNode * 類(lèi)型變量 typedef void (CCObject::*SEL_CallFuncND)(CCNode*, void*); //傳遞CCNode * 類(lèi)型變量,和無(wú)類(lèi)型變量 typedef void (CCObject::*SEL_CallFuncO)(CCObject*); //傳遞CCObject *類(lèi)型變量 #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); |
案例說(shuō)明:
| 無(wú)參的假動(dòng)作 void funcCallBack(); |
| T13Action.h |
| #ifndef _T13Action_H__ #define _T13Action_H__ #include "cocos2d.h" #include "TBack.h" USING_NS_CC; class T13Action :public TBack { public: ??? static CCScene * scene(); ??? CREATE_FUNC(T13Action); ??? bool init(); ? ??? void draw(); ? ??? //無(wú)參的假動(dòng)作 ??? void funcCallBack(); ??? //帶調(diào)用者的假動(dòng)作 ??? void funcNCallBack(CCNode * node); ??? //帶有調(diào)用者和數(shù)據(jù)的假動(dòng)作 ??? void funcNDCallBack(CCNode * node, void * data); ??? //帶有對(duì)象的假動(dòng)作 ??? void funcOCallBack(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); ??? return scene; } ? bool T13Action::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)); ??? //假動(dòng)作就是當(dāng)一個(gè)動(dòng)作執(zhí)行完了之后又執(zhí)行的一個(gè)動(dòng)作 ??? CCCallFunc * func = CCCallFunc::create(this,callfunc_selector(T13Action::funcCallBack)); ??? CCSequence * seq = CCSequence::create(by2, func, NULL); ? ??? man->runAction(seq); ??? addChild(man); ??? return true; } ? //原生繪圖,每一幀都會(huì)繪圖 void T13Action::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); } ? //無(wú)參的假動(dòng)作 void T13Action::funcCallBack() { ??? CCLog("action is over"); } |
| 運(yùn)行結(jié)果(運(yùn)行速度是變速的):
輸出結(jié)果:
|
4 假動(dòng)作
| #ifndef _T13Action_H__ #define _T13Action_H__ #include "cocos2d.h" #include "TBack.h" USING_NS_CC; class T13Action :public TBack { public: ??? static CCScene * scene(); ??? CREATE_FUNC(T13Action); ??? bool init(); ? ??? //無(wú)參的假動(dòng)作 ??? void funcCallBack(); ??? //帶調(diào)用者的假動(dòng)作 ??? void funcNCallBack(CCNode * node); ??? //帶有調(diào)用者和數(shù)據(jù)的假動(dòng)作 ??? void funcNDCallBack(CCNode * node, void * data); ??? //帶有對(duì)象的假動(dòng)作 ??? void funcOCallBack(CCObject * obj); }; #endif |
| #include "T13Action.h" #include "AppMacros.h" ? CCScene *T13Action::scene() { ??? CCScene * scene = CCScene::create(); ??? T13Action * layer = T13Action::create(); ??? scene->addChild(layer); ??? return scene; } ? bool T13Action::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)); ? ? ??? //創(chuàng)建一個(gè)CCArray,在使用前調(diào)用retain(),要注意的是在最后退出之 ??? //后要在onExit()中將array進(jìn)行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)); ? ??? //調(diào)用 ??? 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); ??? return true; } ? //其中CCNode表示的是動(dòng)作的執(zhí)行者 void T13Action::funcNCallBack(CCNode *node) { ??? CCSprite *spr = (CCSprite *)node; ??? //將精靈從屏幕上 ??? //spr->removeFromParentAndCleanup(true); ??? CCJumpBy * by = CCJumpBy::create(2, ccp(0,0),100,1); ??? spr->runAction(by); } ? void T13Action::funcNDCallBack(CCNode * node, void * data) { ??? CCSprite *spr = (CCSprite *)node; ??? //下面是取出數(shù)據(jù)的代碼 ??? CCString * str = CCString::createWithFormat("%s", (char*)data); ??? //給精靈旋轉(zhuǎn) ??? spr->setRotation(str->floatValue()); } ? void? T13Action::funcOCallBack(CCObject * obj) { ??? CCArray * array = (CCArray*)obj; ??? //從array中取出第0個(gè)元素 ??? CCSprite * spr = (CCSprite*)array->objectAtIndex(0); ??? addChild(spr); } |
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的2假动作,数据缓冲,CCEaseExponential,CCEaseElastic,CCEaseBounce,CCCallFunc,funcNCallBack,funcNDCallBack,funcO的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 电动车电机上标的35H一TKACNC是什
- 下一篇: 徐工xg700e成槽机柴油油箱多大容量?