Cocos2dx 小技巧(四)delegate委托
尊重原创,转载请注明来源:http://blog.csdn.net/start530/article/details/22829039
有些技巧你不知道不要紧,但知道后会很牛逼。 首先我建立一个委托的基类 class MyDelegate { public: virtual void onGameStart(void) = 0;//创建游戏开始的虚函数 virtual void onGameEnd(void) = 0;//创建游戏结束时的虚函数 }; 下面创建一个GameLayer(游戏层)
class GameLayer : public cocos2d::Layer { public: static cocos2d::Scene* createScene(); virtual bool init(); CREATE_FUNC(GameLayer); CC_SYNTHESIZE(MyDelegate*,delegator,Delegator);//这一步不理解的看下面 }; 游戏层的创建步骤是大家最熟悉的CREATE_FUNC()啦,不过可能有的小伙伴对 CC_SYNTHESIZE 这货不是很理解。其实它就是一个宏啦。看下源码:
#define CC_SYNTHESIZE(varType,varName,funName) protected: varType varName; public: virtual varType get##funName(void) const { return varName; } public: virtual void set##funName(varType var){ varName = var; } 看过源码后,我们把CC_SYNTHESIZE(MyDelegate*,Delegator);带进去试下,实际上与下面这几条代码是同样的意思。
protected: MyDelegate* delegate; public: virtual MyDelegate* getDelegator(void) const { return delegate}; virtual void setDelegator(MyDelegate* dele) { delegate = dele}; 下面创建StatusLayer(状态层)
//StatusLayer 继承了MyDelegate class StatusLayer : public cocos2d::Layer,public MyDelegate { public: virtual bool init(); CREATE_FUNC(StatusLayer); void onGameStart() override;//游戏开始 void onGameEnd() override;//游戏结束 }; 定义如下:
bool StatusLayer::init() { return true; } void StatusLayer::onGameStart() { CCLOG("Game Start"); } void StatusLayer::onGameEnd() { CCLOG("Game Over"); } 好了,创建完后,就面临一个问题了:GameLayer该怎么去调用StatusLayer里的onGameStart()与onGameEnd()两个函数呢? 突然想起GameLayer的init()函数还没有定义,那我就在init中勾引StatusLayer吧。
bool GameLayer::init() { StatusLayer* status_layer = StatusLayer::create();//创建一个状态层 this->setDelegator(status_layer);//设置delegator指向新建的状态层 this->delegator->onGameStart();//通过delegator调用StatusLayer的onGameStart()与onGameEnd() this->delegator->onGameEnd(); return true; } 运行结果我就不打出来了。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |