我学cocos2d-x (二) 使用Delegate(委托)

Delegate(委托)是什么

Delegate是ios开发中的一个概念,主要是为了让类A中的功能,放到类B中来实现,这样可以合理的把功能划分到不同的文件中进行实现,从而更好的实现模块的分离。如UIApplicationDelegate用于处理app启动、进入前台、进入后台等消息。
从设计模式的角度来看,Delegate属于组合模式,使用低耦合的代码,有利于编写可拓展的程序。

cocos2d-x如何实现Delegate
我们看下如何在cocos2d-x中使用Delegate的实例。

1、定义一个接口类StatusDelegate,声明需要实现onGameStart、onGamePlaying、onGameEnd这三个方法:
class   StatusDelegate  {
public  :
   
     virtual   void  onGameStart(  void ) = 0;
   
     virtual   void  onGamePlaying(  int  score) = 0;
   
     virtual   void  onGameEnd(  int  curScore,  int  bestScore) = 0;
   
};

2、StatusLayer继承自StatusDelegate,实现onGameStart、onGamePlaying、onGameEnd这三个方法:

class  StatusLayer: public  Layer, public  StatusDelegate{
     ...
      void  onGameStart();
   
      void  onGamePlaying(  int  score);
   
      void  onGameEnd(  int  curScore,  int  bestScore);
     ...
}


3、在GameLayer中添加StatusDelegate变量:
class   GameLayer  public  Layer {
     ...
     CC_SYNTHESIZE  ( StatusDelegate  *, delegator, Delegator);
     ...
}
这里CC_SYNTHESIZE这个宏用于添加StatusDelegate变量
#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; }


4、创建GameLayer时指定Delegate
auto  gameLayer =  GameLayer  ::create();
if  (gameLayer) {
     gameLayer->setDelegator(statusLayer);

}

5、调用 Delegate的onGameStart()方法
if  ( this  ->gameStatus ==  GAME_STATUS_READY ) {
         this ->delegator->onGameStart();
        ...
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值