我在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布局方案,需尽快得到确认,感谢!