1.自动内存管理
1)概述
C++语言默认是没有提供自动内存管理的。使用者需要自己分配,自己释放。在cocos2d-x里提供了一个自动内存管理的方案。主要是通过CCObject来提供的,用户只要继承了CCObject,就可以通过调用autorelease()来告诉系统进行自动内存管理。
一般用法就是: CCLayer* pLayer = CreateLayer(s_nActionIdx); pLayer->autorelease();
2)自动内存管理的实现
自动内存管理的实现原理大概是:用户设置自动释放功能时,内存管理(CCPoolManager)会自动把这个CCObject对象加入其管理池中。等到一定时机(场景销毁,一帧渲染结束,程序退出等),内存管理会遍历其所管理的每一个对象,逐个调用CCObject的释放函数进行释放。CCObject自己内部设置一个引用系数,增加一个使用就系数加一,释放就系数减一,当系数为0时,才真正进行释放。
如果研究下CCPoolManager,会发现进行真正内存管理的是自动释放池(CCAutoreleasePool),CCPoolManager下面包含有多个CCAutoreleasePool。CCAutoreleasePool提供了addObject,removeObject,clear功能。我开始很疑惑,因为进行内存释放管理,一个CCAutoreleasePool就够了。后来仔细考虑,发现了这个的秘密所在:
CCPoolManager管理多个CCAutoreleasePool,是为了方便确定哪个自动释放池(CCAutoreleasePool)可以进行释放,而不用影响到其他的自动释放池。比如在关卡切换时,上一个关卡的自动释放池的数据就可以进行自动释放了,而新关卡的自动释放池不变~~ 好想法!
2.常见宏
1)NS_CC_BEGIN cocos2d命名空间开始
2) NS_CC_END cocos2d命名空间结束
3)USING_NS_CC 声明cocos2d命名空间
4)CC_SYNTHESIZE_READONLY(varType, varName, funName)声明一个成员变量以及getfunName函数,没有set函数。getfunName已经实现,其实现就是返回这个值。
5)CC_SYNTHESIZE_READONLY_PASS_BY_REF(varType, varName, funName) 类似CC_SYNTHESIZE_READONLY,不过getfunName返回的是引用。
6)CC_SYNTHESIZE(varType, varName, funName) 声明一个成员变量以及getfunName,setfunName函数.函数声明和实现都有
7)CC_SYNTHESIZE_PASS_BY_REF(varType, varName, funName) 类似CC_SYNTHESIZE,不过getfunName返回的是引用。
8)CC_PROPERTY_READONLY(varType, varName, funName) 声明一个成员变量以及getfunName函数,没有set函数。getfunName函数的实现要自己做
9)CC_PROPERTY_READONLY_PASS_BY_REF(varType, varName, funName) 类似CC_PROPERTY_READONLY,不过getfunName返回的是引用。getfunName函数的实现要自己
10)CC_PROPERTY(varType, varName, funName) 声明一个成员变量以及getfunName,setfunName函数.函数实现要自己做
11)CC_PROPERTY_PASS_BY_REF(varType, varName, funName) 类似CC_PROPERTY,,不过getfunName返回的是引用
分享到:
相关推荐
《Cocos2d-x 3.x游戏开发实战》是一本深度探讨Cocos2d-x 3.x框架的游戏开发书籍,适合对游戏编程有兴趣的开发者学习。Cocos2d-x 是一个开源的、跨平台的2D游戏开发框架,广泛应用于iOS、Android、Windows等多平台的...
x实战:JS卷——Cocos2d-JS开发内容简介:本书是介绍Cocos2d-x游戏编程和开发技术书籍,介绍了使用Cocos2d-JS中核心类、瓦片地图、物理引擎、音乐音效、数据持久化、网络通信、性能优化、多平台发布、程序代码管理、...
- 理解资源管理:在Cocos2d-x中,资源管理是开发过程中的重要一环,要学习如何加载、缓存和清理游戏资源。 - 学习渲染流程:Cocos2d-x使用OpenGL作为渲染接口,初学者需要学习OpenGL基础以及Cocos2d-x中的渲染流程和...
cocos2d-x不仅适用于游戏开发,还可以用于创建教育软件、互动媒体和其他2D图形应用,其强大的场景管理、精灵(Sprite)系统和粒子效果等功能,使得开发者能够快速构建各种复杂的2D场景。 总的来说,cocos2d-x 2.2.2...
通过学习这些源代码,开发者不仅能理解Cocos2d-x的基本用法,还能学习到游戏开发的最佳实践和高级技巧。对于初学者,这是一个绝佳的动手实践机会;对于经验丰富的开发者,它提供了深入框架内部的窗口。总之,《Cocos...
10. **性能优化**:Cocos2d-x 3.1对内存管理和渲染效率进行了优化,以确保在不同设备上的流畅运行。 11. **脚本支持**:虽然3.1版本主要以C++为主,但Cocos2d-x也支持Lua和JavaScript,允许开发者选择更适合自己的...
本书可能会详细讲解Cocos2d-x中的内存管理机制,如自动引用计数(ARC)和弱引用,以及如何通过优化代码和数据结构来提高游戏运行效率。 最后,还会涉及到Cocos2d-x的构建系统和发布流程,包括多平台支持、资源打包...
接下来,把 F:\cocos2d-1.0.1-x-0.9.1\cocos2dx 和 F:\cocos2d-1.0.1-x-0.9.1\CocosDenshion 这两个文件夹里面的全部内容拷贝一份到 D:\cocos2d-xProjects\HelloWorld 中去。 九、设置静态链接库 接下来,打开 F:\...
在学习和使用cocos2d-x 3.8时,开发者需要注意与最新版本的差异,例如API的变化、新功能的缺失等。同时,由于3.8是旧版本,可能不再受到官方的维护和支持,所以在解决特定问题时可能需要查阅旧的文档或社区论坛。 ...
在资源管理方面,Cocos2d-x 3.13.1版本优化了资源加载和释放机制,这有利于减少内存消耗,提高游戏性能。开发者需要确保正确地加载和释放Spine动画资源,避免内存泄漏。此外,考虑到移动设备的性能限制,合理地优化...
cocos2d-x 是一个开源的游戏开发框架,使用 C++ 语言编写,支持多平台发布,包括 iOS、Android、Windows、macOS、Linux 和 Web。cocos2d-x v3.16 是该框架的一个版本号,本文档主要介绍了该版本的安装流程以及环境...
在压缩包文件"jyinkailej-Flash2Cocos2d-x-8c0deff"中,可能包含了Flash2Cocos2d-x工具的源码、文档、示例项目和其他相关资源,供开发者学习和使用。这些资源可以帮助开发者深入理解如何使用该工具,并进行实际的...
1. **Cocos2d-x入门**:介绍Cocos2d-x的基本架构,包括场景(Scene)、层(Layer)、节点(Node)等概念,以及如何设置项目环境,创建和管理游戏资源。 2. **图形与动画**:讲解如何使用Cocos2d-x的绘图API绘制2D...
1. 学习cocos2d-x 3.0的官方文档,了解其核心类和API。 2. 研究cocos2d-x社区的教程和示例项目,积累实战经验。 3. 探索Box2D物理引擎,提升游戏的物理表现力。 4. 实践编程,通过修改和调试代码,理解行走逻辑的每...
5. 学习资源:cocos2d-x 社区活跃,有丰富的教程、文档和示例代码可供学习参考,帮助开发者快速上手。 总结,cocos2d-x 2.1.4版本是移动游戏开发者的强大工具,它的优化和新特性使得开发者能够更加高效地创建出高...
cocos2d-x-2.1.5
通过《Cocos2d-x实战 JS卷》的学习,开发者不仅能掌握Cocos2d-x框架的JavaScript实现,还能了解到游戏开发的通用知识和最佳实践。书中的实例和实战项目将帮助读者将理论知识转化为实际操作能力,提升游戏开发的专业...
由于Cocos2d-x支持多种编程语言(包括C++、JavaScript和Lua),Cocos2d-JS意味着开发者可以采用JavaScript来构建游戏项目。 4. PDF电子书下载:这是提供给读者的下载格式,即PDF(便携式文档格式),它是一种通用的...
1. 性能提升:cocos2d-x 3.13.1版本在性能方面做了大量优化,包括内存管理、渲染效率等方面的改进,使得游戏运行更加流畅。 2. 脚本支持:该版本增强了Lua和JavaScript的绑定,让开发者可以选择更适合自己的脚本语言...
这份API文档不仅提供了关于Cocos2d-x的基本信息,还深入到具体的技术细节,对于学习和使用cocos2d-x开发游戏的开发者来说,是非常宝贵的参考资料。通过这份文档,开发者可以了解如何利用cocos2d-x的API构建游戏场景...