读书笔记cocos2d-x之代码风格

1、Cocos2d-x拥有一个包含其他所有头文件文件“cocos2d.h”。通常,我们只需要在使用时包含这个头文件,就可以使用引擎的全部功能

2、NS_CC_Begin和NS_CC_END:这两个宏相当于把所有类型都包含在了cocos2d命名空间下。

3、USING_NS_CC:常用引擎提供的这个宏引用cocos2d命名空间

例:#define USING_NS_CC using namespaced cocos2d

---------------------

创建cocos2d-x对象

Cocos2d-x中,无论是创建对象的类型,还是创建对象的方法与C++不同。Cocos2d-x不使用传统的值类型,所有的对象都创建在堆上,然后通过指针引用。创建Cocos2d-x对象通常有两种方法:第一种是首先使用new操作符创造一个未初始化的对象,然后调用init系列方法来初始化;第二种是使用静态的工厂方法直接创建一个对象。

Cocos2d-x类的构造函数通常没有参数,创建对象所需的参数通过init开头的一系列初始化方法传递给对象。创建对象的步骤如下所示:使用new操作符调用构造函数,创建一个没有初始化的空对象。选择合适的初始化方法,并调用它来初始化对象。

例:CCSprite *sprite1 = new CCSprite();

sprite1->initWithFile("HelloWord.png");

在Cocos2d-x中,许多类会自带一系列工厂方法,这些工厂方法是类提供的静态函数。只要提供必要的参数,就会返回一个完成了初始化的对象。通常init系列的初始化方法都会有其对应的工厂方法,他们的名称类似,参数一致,都可以用于创建对象。通常init系列的初始化方法都会有其对应的工厂方法,他们的名称类似,参数一致,都可以用于创建对象。

例:CCSprite *sprite2 = CCSprite::spriteWithFile("HelloWorld.png");

CCSprite*sprite3 = CCSprite::create("HelloWorld.png");

使用构造函数创建的对象,他的所有权已经属于调用者了,使用工厂方法创建的对象的所有权却并不属于调用者。因此,使用构造函数创建的对象需要调用者负责释放,而使用工厂方法创建的对象则不需要。

-------------------------------------------

选择器

Cocos2d-x提供了一系列创建函数指针的宏,这些宏都只有一个参数SELECTOR,表示被指向的类方法。将这些宏列举如下:

schedule_selector(SELECTOR)

callfunc_selector(SELECTOR)

callfuncN_selector(SELECTOR)

callfuncND_selector(SELECTOR)

menu_selector(SELECTOR)

event_selector(SELECTOR)

compare_selector(SELECTOR)

----------------------------------------------

属性

Cocos2d-x规定了属性访问器的方法名称已get或set为前缀,后接属性名。

Cocos2d-x中与属性相关的宏:

CC_PROPERTY:定义一个属性及其访问器,没有实现。通常用于简单的值类型

CC_PROPERTY_READONLY:定义一个属性,只包含get访问器,没有实现

CC_PROPERTY_PASS_BY_REF:定义一个属性,访问器使用引用类型传递参数,没有实现。通常用于结构体类型

CC_PROPERTY_READONLY_PASS_BY_REF:定义一个属性,只包含get访问器,且使用引用类型传递参数,没有实现

CC_SYNTHESIZE:同CC_PROPERTY,实现访问器方法

CC_SYNTHESIZE_READONLY:同CC_PROPERTY_READONLY,实现了访问器方法

CC_SYNTHESIZE_PASS_BY_REF:同CC_PROPERTY_PASS_BY_REF,实现了访问器方法

CC_SYNTHESIZE_READONLY_PASS_BY_REF:同CC_PROPERTYREADONLY_PASS_BY_REF,实现了访问器方法

CC_SYNTHESIZE_RETAIN:同CC_PROPERTY,实现了访问器方法。用于派生自CCObject的类型,访问器采取Coco2d-x的内存管理机制自动维护,对象的引用计数

这些宏只要写在类的定义之中即可。每个宏都有3个参数,分别是:varType,属性类型,如果属性类型是对象,需要写成指针的形式;varName,属性的私有字段名称:funName,属性的访问器名称,也就是紧接在get或set前缀后的部分。

例:int tag;
int getTag() { return tag; }
void setTag(int aTag) { tag = aTag; }

转换为:CC_SYNTHESIZE(int,tag,Tag)

---------------------------------------

单例

单例模式保证了全局有且只有一个实例对象,保证自动地初始化改对象,使得程序在任何时候任何地方都可以访问、获取该对象

在这种情况下,Cocos2d-x采用了单例的技巧。用户可以通过类提供的静态方法获取独一无二的实例而不需要自己来创建。

例:

static CCdisplayLinkDirector s_SharedDirector;CCDirector* CCDirector::sharedDirector(void)
{
static bool s_bFirstUseDirector = true;
if (s_bFirstUseDirector)
{
s_bFirstUseDirector = false;
s_SharedDirector.init();
}
return &s_SharedDirector;
}

补充内容有时希望函数中的局部变量的值在函数调用结束后不消失而保留原值,即其占用的存储单元不释放,在下一次该函数调用时,该变量保留上一次函数调用结束时的值。这时就应该指定该局部变量为静态局部变量(static local variable)。 其中s_bFirstUseDirector就是一个静态局部变量

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...