对于不同控件的属性解析,有多种方案可以选择。
比较简单的一种是通过原控件的派生方式构建多态解析器,每个子类负责解析该类控件的属性。另一种是使用组件式解析,两者差别不大,前者基于多态,后者基于组合。组件式还可以引入属性映射:建立属性名与组件类别的关联,只需配置一次,即可实现自动解析。
以下示例采用多态解析方式:
class NodeReader
{
public:
void NodeParse(Node*ret)
{
ret->setPositionX(100);
}
};
class SpriteReader :public NodeReader
{
public:
void SpriteParse(Sprite*ret)//当然可以用virtual 来统一接口名
{
NodeReader::NodeParse(ret);
ret->setFlippedX(true);
}
};
Node * creater()
{
SpriteReader *reader = new SpriteReader;
Sprite *ret = Sprite::create("1.png");
reader->SpriteParse(ret);
return ret;
}
this->addChild(creater());