关于1.6版本cocostudio的Panel锚点设置无效的问题的解决方法

我在cocostudio里把panel锚点设置成0.5,0.5并布局子节点,程序运行后发现子节点没有相对于panel中心布局,而是跑到了左下角。
搜了下相关的帖子http://www.cocoachina.com/bbs/read.php?tid=232181&keyword=%C3%AA%B5%E3
http://www.cocoachina.com/bbs/read.php?tid=227369&keyword=�
不过没看到解决的办法,于是看了下源码,代码版本是3.2

首先是widgerReader没有处理anchor,位置是WidgetReader.cpp的WidgetReader::setPropsFromJsonDictionary方法,我在150行左右添加了三行代码
float anchorX = DICTOOL->getFloatValue_json(options, P_AnchorPointX);
float anchorY = DICTOOL->getFloatValue_json(options, P_AnchorPointY);

widget->setAnchorPoint(Vec2(anchorX, anchorY));

然后在CCSGUIReader.cpp里1489行的位置
if (!dynamic_cast<Layout*>(widget))
{
if (child->getPositionType() == ui::Widget::PositionType::PERCENT)
{
child->setPositionPercent(Vec2(child->getPositionPercent().x + widget->getAnchorPoint().x, child->getPositionPercent().y + widget->getAnchorPoint().y));
}
child->setPosition(Vec2(child->getPositionX() + widget->getAnchorPointInPoints().x, child->getPositionY() + widget->getAnchorPointInPoints().y));
}

                widget->addChild(child);

可以看到只有控件不是Layout的时候才会根据其锚点重新设置子节点位置,于是我屏蔽掉了if (!dynamic_cast<Layout*>(widget))这句。

再运行代码显示已经正确了,这里想问下版主这样会不会导致其他问题,因为影响到ui布局方案,需尽快得到确认,感谢!

人工置顶,这论坛有没有版主啊。。

目前是不推荐修改层容器的锚点,谢谢。

因为布局需要根据父节点的中心点作参考,那有没有替代方案?cocostudio没有提供Node节点,能用作父节点的就只能是panel了
panel子控件用相对布局的话,现在只能相对于四个边设置位置,没法相对于中心点设置位置,这个有点麻烦。。

比如说panel根据屏幕自适应,panel上面部分子控件是以panel四个边为参考相对布局,部分子控件以panel中心点为参考相对布局,现在的cocostudio就没法直接满足这个需求,而必须在panel上加一个固定大小的子panel,设置居中,再在子panel上布局那些以中心点参考位置的子控件。
而且panel提供了锚点设置的功能,很自然的就会想到把panel锚点设置居中去布局,我相信这个应该是相关代码没有做正确处理导致的bug,希望下个版本能修复呀:904:

可以将panel 大小设为(1,1) ,看下