首页 > 其他 > 详细

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

时间:2014-04-30 23:05:56      阅读:629      评论:0      收藏:0      [点我收藏+]

      平台的转换,总是让我们不自觉的去寻找两者的相同处,不过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函数即可保存了。

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

Cocos2d-X对常用Object-C特性的替换,布布扣,bubuko.com

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

原文:http://www.cnblogs.com/xdxer/p/3701250.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!