笔者今天发现导入cocostudio的ui界面时,会有部分控件出现错位的现象,后来我看了一下源码,发现是部分控件是没有继承
Layout类,导致不能设置控件位置造成,原因可以看看cocos2dx 源码的CCSGUIReader.cpp文件的函数:
Widget* WidgetPropertiesReader0300::widgetFromJsonDictionary(const rapidjson::Value& data)
的最后一段
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类才能实现位置的设置,而UIPanel类不继承Layout类,所以不会进行位置设置,即使cocostudio有位置设置,
在游戏运行中也不会看到设置位置。