• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Cocos2d-x中的属性访问器

mysql 搞代码 4年前 (2022-01-09) 13次浏览 已收录 0个评论

C的类成员只有方法与字段,没有属性和事件,这给开发者带来了不便。为了实现Objective-C中提供的属性功能,我们不得不使用方法来模拟get和set访问器。Cocos2d-x规定了属性访问器的方法名称以get或set为前缀,后接属性名。在CCNode中包含大量属性,例如用于给

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”中。
表2-1 Cocos2d-x中与属性相关的宏


描  述
CC_PROPERTY定义一个属性及其访问器,没有实现。通常用于简单的值类型
CC_PROPERTY_READONLY定义一个属性,只包含get访问器,没有实现
CC_PROPERTY_PASS_BY_REF定义一个属性,访问器使用引用类型传递参数,没有实现。通常用于结构体类型
CC_PROPERTY_READONLY_PASS_BY_REF定义一个属性,只包含get访问器,且使用引用类型传递参数,没有实现

(续)

描  述
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_PROPERTY_READONLY_PASS_BY_REF,实现了访问器方法
CC_SYNTHESIZE_RETAIN同CC_PROPERTY,实现了访问器方法。用于派生自CCObject的类型,访问器采取Cocos2d-x的内存管理机制自动维本文来源gao@daima#com搞(%代@#码@网&护对象的引用计数

这些宏只要写在类的定义之中即可。每个宏都有3个参数,分别是:

varType,属性类型,如果属性类型是对象,需要写成指针的形式;

varName,属性的私有字段名称;

funName,属性的访问器名称,也就是紧接在get或set前缀后的部分。

利用Cocos2d-x提供的宏,上面的Tag属性定义就可以用下面一条语句代替了:

CC_SYNTHESIZE(int, tag, Tag)


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Cocos2d-x中的属性访问器

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址