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函数即可保存了。
当然游戏的存档还是不能实用如此简单的方式来存储,这个会在随后具体说明。通常只是用来存储游戏的一些配置,安全性不高的数据。