【cocos2d-x】属性设置及单例模式

前端之家收集整理的这篇文章主要介绍了【cocos2d-x】属性设置及单例模式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。


出自图书《制作自己的捕鱼达人》


单例:

相对于前面的内容,单例(singleton)则是一个很易于理解的概念。在Cocos2d-x引擎中,我们能看到大量单例的身影,它们大部分出现在一些系统资源管理类中。单例模式保证了全局有且只有一个实例对象,保证自动地初始化该对象,使得程序在任何时候任何地方都可以访问、获取该对象。

例如,Cocos2d-x的游戏流程控制器CCDirector是一个独一无二的控制器,用于切换游戏场景。换句话说,不可能同时存在两个CCDirector实例。

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

static CCDisplayLinkDirectors_SharedDirector;

CCDirector*CCDirector::sharedDirector(void)

{

static bool s_bFirstUseDirector = true;

if (s_bFirstUseDirector)

{

s_bFirstUseDirector = false;

s_SharedDirector.init();

}

return &s_SharedDirector;

}

可以发现,CCDirector维护了一个静态的CCDirector实例,在第一次使用前初始化。为了访问CCDirector控制器,我们可以使用如下代码

CCDirector::sharedDirector()->replaceScene(newScene);

这条语句使用CCDirector::sharedDirector()获取CCDirector的唯一实例,然后调用replaceScene来切换到新场景。

属性

C++的类成员只有方法与字段,没有属性和事件,这给开发者带来了不便。为了实现Objective-C中提供的属性功能,我们不得不使用方法来模拟get和set访问器。Cocos2d-x规定了属性访问器的方法名称以get或set为前缀,后接属性名。在CCNode中包含大量属性,例如用于给节点做标记的Tag属性,它的访问器分别为getTag()和setTag(int aTag),其实现原理大致如下:

int tag;

int getTag() { return tag; }

void setTag(int aTag) { tag = aTag; }

在这个例子中,属性的类型是int,处理较为简单。由于涉及内存管理,开发中我们对数值类型、结构体类型、Cocos2d-x对象的处理方法都不尽相同,这一点在读者了解2.3节介绍的Cocos2d-x内存管理后,会有更深刻的体会。

为每一个属性编写一个或两个访问器方法是一项十分枯燥的任务,为了避免重复性的工作,Cocos2d-x提供了一系列宏来帮助我们方便地创建属性。表2-1列举了所有属性相关的宏,它们定义在引擎目录中的“platform/CCPlatformMacros.h”中。 原文链接:https://www.f2er.com/cocos2dx/342991.html

猜你在找的Cocos2d-x相关文章