{ CCB_MEMBERVARIABLEASSIGNER_GLUE(this,"m_String2",CCLabelTTF*,this->m_String2);
return false;
}
4.为自定义类型设置custom properties,具体在编辑中如何设置custom propertyies就不在些描述了,下面只专主如何将自定义属性绑定到代码中,cocosbuilder支持的自定义类型有4种:int,float,string,bool。假设在cocosbuilder中设置了4个自定义类型的变量,分别是
int 类型的m_intVal;
float类型的m_floatVal;
string类型的m_stringVal;
bool类型的m_boolVar;
为了实现绑定到类TestAutoGenLayer,
a.该类必须实现类cocos2d::extension::CCBMemberVariableAssigner的接口onAssignCCBCustomProperty
b.定义与自定义类型相关的变量
绑定代码如下:
[cpp]
bool TestAutoGenLayer::onAssignCCBCustomProperty(cocos2d::CCObject *pTarget, const char *pMemberVariableName, cocos2d::extension::CCBValue *pCCBValue)
{
if (pTarget == this)
{
if (0 == strcmp(pMemberVariableName, "m_intvar")){
m_intvar = pCCBValue->getIntValue();
return true;
}
if (0 == strcmp(pMemberVariableName, "m_floatVar")){
m_floatVar = pCCBValue->getFloatValue();
return true;
}
if (0 == strcmp(pMemberVariableName, "m_stringVar")){
m_stringVar = pCCBValue->getStringValue();
return true;
}
if (0 == strcmp(pMemberVariableName, "m_bool")){
m_bool = pCCBValue->getBoolValue();
return true;
}
}
return false;
}
bool TestAutoGenLayer::onAssignCCBCustomProperty(cocos2d::CCObject *pTarget, const char *pMemberVariableName, cocos2d::extension::CCBValue *pCCBValue)
{
if (pTarget == this)
{
if (0 == strcmp(pMemberVariableName, "m_intvar")){
m_intvar = pCCBValue->getIntValue();
return true;
}
if (0 == strcmp(pMemberVariableName, "m_floatVar")){
m_floatVar = pCCBValue->getFloatValue();
return true;
}
if (0 == strcmp(pMemberVariableName, "m_stringVar")){
m_stringVar = pCCBValue->getStringValue();
return true;
}
if (0 == strcmp(pMemberVariableName, "m_bool")){
m_bool = pCCBValue->getBoolValue();
return true;
}
}
return false;
}
二. 如何实现自动生成代码
根据上面的分析,我们知道一共有四种类型的绑定代码需要生成,每种类型的绑定都需要生成声明和实现(.h文件与.cpp文件),另外还要生成类的定义、构造函数及文件的尾部。下面来一一分析需要生成代码。
1. MenuItem回调
a) 头文件:生成Selector对应的函数声明
b) cpp文件,生成空的Selector函数体,
c) cpp文件 生成绑定代码
2. ControlButton回调
a) 头文件:生成Selector对应的函数声明
b) cpp文件,生成空的Selector函数体,
c) cpp文件 生成绑定代码
3. 场景对象赋值到宿主
a) 头文件,生成变量声明
b) cpp文件,生成绑定代码
c) 构造函数,变量赋初值
4. 自定义变量赋值到宿主
a) 头文件,生成变量声明
b) cpp文件,生成绑定代码
c) 构造函数,变量赋初值
5. 杂项
a) 类定义生成
b) 构造函数生成
c) 头文件尾部生成
要生成这些代码需要些什么信息呢,为了方便说明,直接上代码
[cpp]
struct TypeName {
TypeName(const std::string& t="",const std::string& n="")
:type(t),name(n){}
std::string type;
std::string name;
};
std::stringm_className; //要生成的类名
std::string m_baseClass; //生成类的父类
std::vector
std::vector
std::vector
std::vector
struct TypeName {
TypeName(const std::string& t="",const std::stri