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函数即可保存了。
当然游戏的存档还是不能实用如此简单的方式来存储,这个会在随后具体说明。通常只是用来存储游戏的一些配置,安全性不高的数据。
Cocos2d-X对常用Object-C特性的替换的更多相关文章
- 最常用的ES6特性(转)
最常用的ES6特性 let, const, class, extends, super, arrow functions, template string, destructuring, defaul ...
- 最常用的ES6特性
遇到了要写出es6新特性的题目,所以查阅了资料来总结一下,点击查看原文. 进入正题,最常用的ES6特性有:let, const, class, extends, super, arrow functi ...
- Python3.x 常用的新特性
Python3.x 常用的新特性 print() 是函数,不是一个语句 raw_input()输入函数,改为 input() Python 3 对文本和二进制数据做了更为清晰的区分. 文本由unico ...
- ES6系列之项目中常用的新特性
ES6系列之项目中常用的新特性 ES6常用特性 平时项目开发中灵活运用ES6+语法可以让开发者减少很多开发时间,提高工作效率.ES6版本提供了很多新的特性,接下来我列举项目中常用的ES6+的特性: l ...
- 【ES6】最常用的es6特性(一)
参考链接: http://www.jianshu.com/p/ebfeb687eb70 http://www.cnblogs.com/Wayou/p/es6_new_features.html 1.l ...
- EntityFramework code first 一些常用的约束特性
参阅: https://msdn.microsoft.com/zh-cn/data/jj591583 1. 主键 public class Test { //名称为 ID 的属性会自动映射为主键(自增 ...
- JavaScript 常用Object
对象 - Map 功能:Map 对象保存键值对. 方法: new Map():新建一个 Map 对象 Map.prototype.has(key):返回布尔值.表示 Map 实例是否包含键对应的值. ...
- 【ES6】最常用的es6特性(二)
1.for of 值遍历 for in 循环用于遍历数组,类数组或对象,ES6中新引入的for of循环功能相似,不同的是每次循环它提供的不是序号而是值. var someArray = [ &quo ...
- 10 个常用的 es6 特性
1. const and let 除了函数作用域之外,增加了块级作用域和常量.const 定义的绑定不可以修改,let定义的绑定在{ }不能访问.之前的 var 如果不在函数作用域内,相当于定义了一 ...
随机推荐
- ubuntu 命令行模式和图形界面切换
1.按ALT+CTRL+F1切换到字符界面(Linux实体机) 如果是VMware虚拟机安装的Linux系统,则切换到字符界面的时候需要以下操作 按下ALT+CTRL+SPACE(空格),ALT+CT ...
- BZOJ1016最小生成树计数 最小生成树 + 排列组合
@[最小生成樹, 排列組合] Discription 现在给出了一个简单无向加权图.你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的 最小生成树.(如果两颗最小生成树中至少有一条边不 ...
- Spring的Hello World工程
通过Spring的Hello World工程研究以下几个点: 0.如何创建工程及引入依赖. 1.通过Spring的beans.xml实现依赖注入,动态创建实例. 2.了解Spring的工作原理. 具体 ...
- BUPT复试专题—串查找(?)
https://www.nowcoder.com/practice/a988eda518f242c29009f8620f654ede?tpId=67&tqId=29642&rp=0&a ...
- win10中显示wpcap.dll丢失的处理方式
win10中显示wpcap.dll丢失的处理方式 学习了:https://jingyan.baidu.com/article/4f34706e30e673e387b56dd8.html 直接安装Win ...
- Effective C++ 条款11,12 在operator= 中处理“自我赋值” || 复制对象时不要忘记每一个成分
1.潜在的自我赋值 a[i] = a[j]; *px = *py; 当两个对象来自同一个继承体系时,他们甚至不需要声明为相同类型就可能造成别名. 现在担心的问题是:假如指向同一个对象, ...
- 2015 Multi-University Training Contest 3--1011 Work
代码: #include<cstdio> #include<cstring> using namespace std; int n,k; int father[105],son ...
- Android Dynamic Action(动态Action)—像访问网页一样地访问Activity
Android Dynamic Action,简称DA,是一种简便.可变Action的实现方案.DA框架的初衷是为了取代Context.startActivity的调用方式,使用建造者模式(Build ...
- 一道有关switch-case题目
一道有关switch-case题目 /** * * @title:SwitchCase.java * @Package:com.you.hbxs.model * @Description:<h3 ...
- 写码时应该缩进使用 tab 还是空格?
对于程序员来说,其实Tab和空格远远不只是“立场”问题那么简单. 在不同的编辑器里tab的长度可能不一致,所以在一个编辑器里用tab设置缩进后,在其它编辑器里看可能缩进就乱了.空格不会出现这个问题,因 ...