转自:http://cjhworld.blog.163.com/blog/static/20707803620132693629307/
1. 按照Cocos2d的编程风格,尽量少用构造函数,用init()进行初始化,构造函数可以适当作为变量的初始化,create的静态初始化函数需要重载,即重写create
2. 当需要派生一个新的类时,不能通过父类的create直接创建,具体的可以在debug时从类指针上看到实际类型并不相符
3. dealloc函数在C++下是析构函数,需要负责安全release各种变量,即使用CC_SAFE_RELEASE来安全释放
4. 内存管理方式
5. 首先必须要注意的一点,在Object-C中对NULL可以进行任何操作而不会报错,而在C++中对NULL进行任何操作都会直接crash
§ 使用CC_SAFE_RELEASE来安全release一个类
§ 使用CC_SAFE_RETAIN来安全retain一个类
§ @property (nonatomic, retain)对应使用CC_SYNTHESIZE_RETAIN申明一个Public变量,即其他变量都为Private,必须注意这里申明的变量必须是继承自CCObject的。然后这里必须使用set与get才能实现Retain的功能。
CC_SYNTHESIZE(int,level,Level);//这个宏会创建getLevel()和setLevel(int)两个方法。 CC_SYNTHESIZE_RETAIN();//也很容易理解,是具有retain属性的变量。
§ Public变量如需在类创建的时候create,需要retain一次,不能直接使用this->(CCSprite::create(“Icon.png”)
6. 委托机制
由于Object-C的消息机制,我们只要拿到了某一个类的指针,就可以向它发送任何消息,因此即使不实现protocol,也会可以实现委托机制的,但是为了便于管理,我们还是通过实现protocol来实现接口,用来响应某个Delegate回调。在C++中我们没有接口的概念,但是我们可以有多重继承,查看Cocos2d-X的源码也可以找到,通过继承的方式来实现委托的回调。
例如,我们定义一个动画播放的代理,动画播放完后会回调:
class AnimaDelegate { Public: Virtual void callWhenAnimFinished(){ }; }
这样我们只需要让响应回调的类,继承AnimaDelegate并重写callWhenAnimFinished方法即可。
7. 所有打印信息必须使用CCLog,方便在编译的时候批量隐藏打印到控制台的调试信息
8. 类似getChild之类的方法直接获取到的是CCObject,可以使用强制转换直接转到到原有的格式上即
CCSprite *a = CCSprite::create(“Icon.png”); this->addChild(a,-1,100); CCSprite *b = (CCSprite*)this->getChildByTag(100);
否则会出现Warning,但强制转换后也会出现问题,例如需要强制转换后的类型不是原类型,进行操作后会crash
9. CCDictionary与CCArray直接对应-iPhone里经常使用的NSDictionary与NSArray,方法函数也类似。除非只是单纯的int或者float运算,否则尽量不使用STL,-x里均为继承自CCObject的类,有一套完整的内存管理系统,而STL是不包含的,尽量使用CCDictionary与CCArray
10. CCARRAY_FOREACH使用的时候需要注意测试,遇到过几次莫名其妙无效的情况(希望这个是我的个人问题,但是我遇到N次了,所以就也写在这把)
11. OpenGL接口在不同平台下可能有细微差异
12. 用到的第三方库务必确定在目标平台是否支持,如pthread库在安卓的支持就是不完整的,在win32上正常的Api换平台后容易崩溃。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述