CCReader似乎不能从ccbi中读取数据赋值给嵌套的自定义类中的成员变量。比如:
界面里边包含CCLayer a,b,c;
嵌套的自定义类为:
ClassFather{
CCLayer a; //界面中第一个layer
ClassChildrenFirst child;
ClassChildrenSecond second;
}
ClassChildrenFirst{
CCLayer b; //界面中第二个layer
};
ClassChildrenSecond{
CCLayer c; //界面中第三个layer
};
CCreader会调用类的成员函数onAssignCCBMemberVariable来给成员变量赋值,但是目前有3个类,就有3个赋值函数,
我看了CCReader中的代码,代码中有两种方法对变量赋值。
第一种:root赋值方式
调用场景的根类的onAssignCCBMemberVariable函数赋值
第二种:owner赋值方式
调用CCreader的owner的onAssignCCBMemberVariable函数赋值
第一种方法只能在ClassFather中的赋值函数里边给ClassChildren的两个类的成员变量赋值
需要注意的是,owner只能在调用readNodeGraphFromFile时通过参数指定。整个读取过程中只能指定一次。
以下是CCReader源代码:
CCObject * target = NULL;
if(memberVarAssignmentType == kCCBTargetTypeDocumentRoot)
{
target = mActionManager->getRootNode();
}
else if(memberVarAssignmentType == kCCBTargetTypeOwner)
{
target = this->mOwner;
//target = pParent;
}
if(target != NULL)
{
CCBMemberVariableAssigner * targetAsCCBMemberVariableAssigner = dynamic_cast(target);
bool assigned = false;
if (memberVarAssignmentType != kCCBTargetTypeNone)
{
if(targetAsCCBMemberVariableAssigner != NULL) {
assigned = targetAsCCBMemberVariableAssigner->onAssignCCBMemberVariable(target, memberVarAssignmentName.c_str(), node);
}
if(!assigned && this->mCCBMemberVariableAssigner != NULL) {
assigned = this->mCCBMemberVariableAssigner->onAssignCCBMemberVariable(target, memberVarAssignmentName.c_str(), node);
}
}
}
```
其中的target = this->mOwner改为target = pParent似乎才合乎语义
pParent为当前成员变量所在的类的指针
或者是我对CCReader的理解有问题,要给嵌套的自定义类赋值不能仅调用readNodeGraphFromFile()函数?
