cocos2d-x学习笔记--创建对象、构造函数及初始化
来源:互联网 发布:匿了网络用语 编辑:程序博客网 时间:2024/06/07 17:59
在Cocos2d-x中创建对象的方法与C++开发者的习惯迥乎不同。在C++中,我们只需要调用类的构造函数即可创建一个对象,既可直接创建一个栈上的值对象,也可以使用new操作符创建一个指针,指向堆上的对象。而在Cocos2d-x中,无论是创建对象的类型,还是创建对象的方法都与C++不同。
Cocos2d-x不使用传统的值类型,所有的对象都创建在堆上,然后通过指针引用。创建Cocos2d-x对象通常有两种方法:第一种是首先使用new操作符创造一个未初始化的对象,然后调用init系列方法来初始化;第二种是使用静态的工厂方法直接创建一个对象。下面我们首先介绍第一种方法。
在Objective-C中并没有构造函数,创建一个对象需要先为对象分配内存,然后调用初始化方法来初始化对象,这个过程就等价于C++中的构造函数。与Objective-C一样,Cocos2d-x也采用了这个步骤。Cocos2d-x类的构造函数通常没有参数,创建对象所需的参数通过init开头的一系列初始化方法传递给对象。创建对象的步骤如下所示。
(1) 使用new操作符调用构造函数,创建一个没有初始化过的空对象。
(2) 选择合适的初始化方法,并调用它来初始化对象。
Cocos2d-x的初始化方法都以init作为前缀,因此可以轻易辨认出来。初始化方法返回一个布尔值,代表是否成功初始化该对象。下面我们提供一个从文件初始化精灵(CCSprite)的例子:
CCSprite* sprite1 = new CCSprite();sprite1->initWithFile("HelloWorld.png");
在这个例子中,我们首先调用构造函数创建一个未经初始化的CCSprite对象,然后在CCSprite提供的8个初始化方法中选择了从文件创建精灵的初始化方法CCSprite::init WithFile(const char* filename)来初始化精灵。
第二种方法则是使用类自带的工厂方法来创建对象。在Cocos2d-x中,许多类会自带一系列工厂方法,这些工厂方法是类提供的静态函数。只要提供必要的参数,就会返回一个完成了初始化的对象。通常init系列的初始化方法都会有其对应的工厂方法,它们的名称类似,参数一致,都可以用于创建对象。在Cocos2d-x的旧版本中,工厂方法通常以类的名称(不包含前缀)开头,而在Cocos2d-x 2.0及后续版本中,工厂方法的名称统一为create。在名称冲突的情况下,也可能采用以create作为前缀的其他函数名。
我们仍然以创建精灵为例,下面的两条语句等价,前者为引擎旧版本中的方法,后者为新版本中的方法,它们都会创建一个与第一种方法所述类似的精灵:
CCSprite* sprite2 = CCSprite::spriteWithFile("HelloWorld.png");CCSprite* sprite3 = CCSprite::create("HelloWorld.png");
这两种方法都可以创建Cocos2d-x对象,然而它们在内存管理方面还是有一点点差异的。使用构造函数创建的对象,它的所有权已经属于调用者了,使用工厂方法创建的对象的所有权却并不属于调用者,因此,使用构造函数创建的对象需要调用者负责释放,而使用工厂方法创建的对象则不需要。我们将在2.3.4节详细介绍它们的区别。
在游戏中,我们需要不断地创建新的游戏元素,通常采取的方法是从Cocos2d-x提供的游戏元素类派生出新的类,并在初始化方法中建立好我们所需的游戏元素。这个过程与微软.NET框架下的Windows Form开发类似。例如在Hello World中,我们从CCLayer类派生出HelloWorld类(这是一个层),并重载了HelloWorld类的init()方法,在这个方法中为HelloWorld层添加内容。为了保证初始化方法可以被子类重载,需要确保初始化方法声明为虚函数:
virtual bool init();
作为参考,我们提供一个典型的init()方法框架如下:
bool init(){ if(CCLayer::init()) { //在此处写入初始化这个类所需的代码 return true; } return false;}
- cocos2d-x学习笔记--创建对象、构造函数及初始化
- cocos2d-x学习笔记--创建对象、构造函数及初始化
- 【cocos2d-x】构造函数与初始化
- 【cocos2d-x 3.x 学习笔记】对象创建方式讨论
- C++使用构造函数初始化结构对象学习笔记
- cocos2d-x 学习笔记(3)cocos2d-x 创建基本控件 及小动画
- Cocos2d-x初始化对象和销毁对象函数执行顺序
- C++ 构造函数初始化列表学习笔记
- Cocos2d-x学习笔记一 创建场景
- 【学习笔记】cocos2d-x 粒子对象
- Cocos2d-X 学习笔记6 Cocos2d-x函数----addChild()
- 学习笔记:数组成员初始化于构造函数初始化列表
- cocos2d-x学习笔记(1) 工程初始化
- cocos2D-x 3.x学习笔记【一】 创建新项目
- 【cocos2d-x 3.x 学习笔记】对象内存管理
- 对象创建及初始化
- 创建对象--构造函数
- 构造函数初始化类对象
- 单线程模型中Message、Handler、Message Queue、Looper之间的关系
- cocos2dx ui::Button 的addClickListener问题
- 最全的Android源码目录结构详解
- hdoj4987Little Pony and Dice【概率dp】
- 排查Java线上服务故障的方法和实例分析
- cocos2d-x学习笔记--创建对象、构造函数及初始化
- android后台任务(一):Handler
- Java 将图片导入到 Taobao TFS 的实现
- 从unique_ptr赋值到shared_ptr引起的指针悬空bug
- 【读书笔记】Android源码设计模式解析与实践(一)
- IOS-第七天笔记
- Android Binder机制
- 大型网站架构系列:20本技术书籍推荐
- hdu1176 免费馅饼(简单DP)