加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 21:20:25 所属栏目:百科 来源:网络整理
导读:出自图书《制作自己的捕鱼达人》 单例: 相对于前面的内容,单例(singleton)则是一个很易于理解的概念。在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”中。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读