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

【cocos2d-x】属性设置及单例模式,第1张

概述出自图书《制作自己的捕鱼达人》 单例: 相对于前面的内容,单例(singleton)则是一个很易于理解的概念。在Cocos2d-x引擎中,我们能看到大量单例的身影,它们大部分出现在一些系统资源管理类中。单例模式保证了全局有且只有一个实例对象,保证自动地初始化该对象,使得程序在任何时候任何地方都可以访问、获取该对象。 例如,Cocos2d-x的游戏流程控制器CCDirector是一个独一无二的控制器


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


单例:

相对于前面的内容,单例(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”中。 总结

以上是内存溢出为你收集整理的【cocos2d-x】属性设置及单例模式全部内容,希望文章能够帮你解决【cocos2d-x】属性设置及单例模式所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1058231.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存