首页 > 代码库 > Cocos2d-X对常用Object-C特性的替换

Cocos2d-X对常用Object-C特性的替换

      平台的转换,总是让我们不自觉的去寻找两者的相同处,不过Cocos2d-X的确对很多Object-C的特性进行了模仿性质的封装,使熟悉Object-C的人能够在其中看到很多类似的概念而感到亲切。
      
      1:Property(特性)
         虽然没有感觉到它有多大的意义,不过习惯了用Property而让编译器来创建getter和setter方法,还是可以在Cocos2d-X中找到类似的方法:
         CC_SYNTHESIZE(int,level,Level);这个宏会创建getLevel()和setLevel(int)两个方法。
         CC_SYNTHESIZE_RETAIN();也很容易理解,是具有retain属性的变量。

      2:委托机制
         由于Object-C的消息机制,我们只要拿到了某一个类的指针,就可以向它发送任何消息,因此即使不识闲protocol,也会可以实现委托机制的,但是为了便于管理,我们还是通过实现protocol来实现接口,用来响应某个Delegate回调。
        在C++中我们没有接口的概念,但是我们可以有多重继承,查看Cocos2d-X的源码也可以找到,通过继承的方式来实现委托的回调。
        例如,我们定义一个动画播放的代理,动画播放完后会回调:

        class AnimaDelegate

         {

                   Public:

                            Virtual void callWhenAnimFinished(){ };

         }

         这样我们只需要让响应回调的类,继承AnimaDelegate并重写callWhenAnimFinished方法即可。
 
      3:声明与实现
         Object-C并没有严格规定所有的消息都需要声明,但是C++里必须严格实现。即使是对父类方法的重写,也需要重新声明。Cocos2d-X为我们定义了很多方便的宏来实现常用方法的声明和定义;
       如:LAYER_NODE_FUNC(MainTitleScene); 它定义并声明了node()。这对于CCNode类来说实用不少。类似的SCENE_NODE_FUNC(StartTitleScene);
   
      4:
简单数据的存储

         CCUserDefault,类似于Object-C中的NSUserDefault,用来存储一些简单的数据。

         CCUserDefault::sharedUserDefault()->setIntegerForKey(“flag”,0);

         CCUserDefault::sharedUserDefault()->getIntegerForKey(“flag”);

       可能为了节省IO操作,cocos2d-x做了一些优化,并不是马上写入文件,而是到了CCUserDefault释放时再写入,如果想要马上写入,可以执行调用下CCUserDefault中的flush函数即可保存了。

            当然游戏的存档还是不能实用如此简单的方式来存储,这个会在随后具体说明。通常只是用来存储游戏的一些配置,安全性不高的数据。