在cocos2dx中你一定用过getTag()和setTag()这俩个函数吧,这里的get和set方法就是属性访问器,用来访问CCNode的tag属性,在我们写代码的时候一般都是将属性做为私有的成员变量,那么想要改变它的值或者是获取属性的值的时候就只能使用方法了。我们可以写一些类似的get和set方法来完成这些任务,但是每次都是这么写是不是很累,cocos2dx中定义了一些宏就帮我们做了这件事,我们告诉它我们的属性类型,属性的名字,get和set后边跟什么标识符,然后这些宏就为我们生成好了方法,是不是很方便啊。下面就通过代码具体看看吧。

//这个类是用来做测试的
#ifndef _MY_SCENE_H_
#define _MY_SCENE_H_
#include <cocos2d.h>

class MyScene
{
	//使用CC_PROPERTY这个宏进行定义,只是在这里声明了方法,并没有实现方法,需要我们在.cpp文件中实现
	//这个宏的含义就是定义string类型的name,他的get和set后边跟的是Name,也就是说方法的名字是
	//getName和setName()
	CC_PROPERTY(std::string,name,Name);
	//使用CC_SYNTHESIZE这个宏进行定义,实现了相应的get和set方法
	CC_SYNTHESIZE(int,age,Age);

	//还有一些宏如下
	//这个宏只是定义了get方法,没有实现,相应的CC_SYNTHESIZE_READONLY类似,只是实现了get方法
	//CC_PROPERTY_READONLY(int,value1,Value1);
	//这个传递的是引用过去,也就是说get的时候获得的是引用,set的时候参数接受的也是引用,
	//一般用在类型是结构体的时候,还有一些其他的组合大家自己看源码
	//CC_PROPERTY_PASS_BY_REF(int,value2,Value2);
};

#endif
#include "MyScene.h"
//使用CC_PROPERTY宏定义的时候它的方法都是没有实现的,只是做了一下声明,所以我们自己要实现
//而CC_SYNTHESIZE这个宏已经为我们按照我下面的这种写法都实现好了
void MyScene::setName(std::string name)
{
	this->name = name;
}
std::string MyScene::getName()
{
	return name;
}
//在init函数中测试一下
    MyScene * scene = new MyScene();

	scene->setName("zaojiahua");
	std::string name = scene->getName();
	scene->setAge(20);
	int age = scene->getAge();
	CCLog("name:%s age:%d",name.c_str(),age);