由于引入了C++ 11特性,cocos2d-x 3.x中許多實現方案,相對于以前的cocos2d-x 2.x,都有了很大的改進,當然性能上也得到一定的提升。

本文關注的是回調函數從2.x到3.x的變化。
cocos2d-x 2.x時代的回調函數
2.X時代主要使用CCCallFunc、CCCallFuncN和CCCallFuncND等幾種方式實現。
CCCallFunc、CCCallFuncN和CCCallFuncND都用來創建帶有回調函數的動作,區別主要在于回調函數是否帶有參數。
2.x時代實例
testCallFunc.h中代碼:
class testCallFunc : public CCLayer{protected:
CCSprite* sprite1;
CCSprite* sprite2;
CCSprite* sprite3;public:
virtual void onEnter();
void callback1();
void callback2(CCNode* sender);
void callback3(CCNode* sender, void* data);
};
testCallFunc.cpp中代碼:
void testCallFunc::onEnter(){
//CCCallFunc的使用
CCFiniteTimeAction* action = CCSequence::create(
CCMoveBy::create(2, ccp(200,0)),
CCCallFunc::create(this, callfunc_selector(testCallFunc::callback1)),
NULL);
//CCCallFuncN的使用
CCFiniteTimeAction* action2 = CCSequence::create(
CCScaleBy::create(2 , 2),
CCFadeOut::create(2),
CCCallFuncN::create(this, callfuncN_selector(testCallFunc::callback2)),
NULL);
//CCCallFuncNC的使用
CCFiniteTimeAction* action3 = CCSequence::create(
CCRotateBy::create(3 , 360),
CCFadeOut::create(2),
CCCallFuncND::create(this, callfuncND_selector(testCallFunc::callback3), (void*)0xbebabeba),
NULL);
sprite1->runAction(action);
sprite2->runAction(action2);
sprite3->runAction(action3);
}
void testCallFunc::callback1(){
CCSize s = CCDirector::sharedDirector()->getWinSize();
CCLabelTTF *label = CCLabelTTF::create("callback 1 called", "Marker Felt", 16);
label->setPosition(ccp( s.width/4*1,s.height/2));
addChild(label);
}
void testCallFunc::callback2(CCNode* pSender){
CCSize s = CCDirector::sharedDirector()->getWinSize();
CCLabelTTF *label = CCLabelTTF::create("callback 2 called", "Marker Felt", 16);
label->setPosition(ccp( s.width/4*2,s.height/2));
addChild(label);
}
void testCallFunc::callback3(CCNode* pTarget, void* data){
CCSize s = CCDirector::sharedDirector()->getWinSize();
CCLabelTTF *label = CCLabelTTF::create("callback 3 called", "Marker Felt", 16);
label->setPosition(ccp( s.width/4*3,s.height/2));
addChild(label);
}cocos2d-x 3.x時代
由于引用了std::function等支持,回調函數得到極大簡化處理。歸納如下:
CallFunc 可以由 std::function<void()> 來創建
CallFuncN 可以由 std::function<void(Node*)> 來創建
CallFuncND 和 CallFuncO 已經被移除了因為它們可以類似地由 CallFuncN 和 CallFunc 來創建。
可以查看示例中的 ActionsTest.cpp 文件,同時注意MenuItem 支持 std::function<void(Node*)> 作為回調。
CallFunc 示例:
// v2.1 版本
// v3.0 版本 (短版本)
// v3.0 版本 (長版本)
// v3.0 中你也可以使用lambda表達式或者其他函數對象
MenuItem 示例:
// v2.1 版本
// v3.0 版本 (短版本)
// v3.0 版本 (長版本)
// v3.0 中你也可以使用lambda表達式或者其他函數對象
另外有需要云服務器可以了解下創新互聯cdcxhl.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
當前題目:Cocos2d-x3.x中新的回調函數歸納-創新互聯
當前URL:http://www.yijiale78.com/article22/dpcjcc.html
成都網站建設公司_創新互聯,為您提供商城網站、ChatGPT、企業網站制作、用戶體驗、手機網站建設、面包屑導航
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯