Есть ли что-то похожее на CCLayoutBox в Cocos2d-x? Я ищу Cocos Studio, но ничего не нахожу. Мне нужен узел, который может размещать своих дочерних элементов в области с неизвестной шириной и/или высотой, чтобы отдельные компоненты были равномерно распределены.
CCLayoutBox в Cocos2d-x?
Ответы (1)
Я не знаком с CCLayoutBox, но думаю, что вам нужен Layout
. На вики есть несколько примеров, объясняющих, как его использовать. Вот один из них:
// Create the layout
Layout* layout = Layout::create();
layout->setLayoutType(LayoutType::VERTICAL);
layout->setContentSize(Size(280, 150));
Size backgroundSize = background->getContentSize();
layout->setPosition(Vec2((widgetSize.width - backgroundSize.width) / 2.0f +
(backgroundSize.width - layout->getContentSize().width) / 2.0f,
(widgetSize.height - backgroundSize.height) / 2.0f +
(backgroundSize.height - layout->getContentSize().height) / 2.0f));
_uiLayer->addChild(layout);
Button* button = Button::create("cocosui/animationbuttonnormal.png", "cocosui/animationbuttonpressed.png");
layout->addChild(button);
LinearLayoutParameter* lp1 = LinearLayoutParameter::create();
button->setLayoutParameter(lp1);
lp1->setGravity(LinearLayoutParameter::LinearGravity::CENTER_HORIZONTAL);
lp1->setMargin(Margin(0.0f, 5.0f, 0.0f, 10.0f));
Button* titleButton = Button::create("cocosui/backtotopnormal.png", "cocosui/backtotoppressed.png");
titleButton->setTitleText("Title Button");
layout->addChild(titleButton);
LinearLayoutParameter* lp2 = LinearLayoutParameter::create();
titleButton->setLayoutParameter(lp2);
lp2->setGravity(LinearLayoutParameter::LinearGravity::CENTER_HORIZONTAL);
lp2->setMargin(Margin(0.0f, 10.0f, 0.0f, 10.0f));
Button* button_scale9 = Button::create("cocosui/button.png", "cocosui/buttonHighlighted.png");
button_scale9->setScale9Enabled(true);
button_scale9->setContentSize(Size(100.0f, button_scale9->getVirtualRendererSize().height));
layout->addChild(button_scale9);
LinearLayoutParameter* lp3 = LinearLayoutParameter::create();
button_scale9->setLayoutParameter(lp3);
lp3->setGravity(LinearLayoutParameter::LinearGravity::CENTER_HORIZONTAL);
lp3->setMargin(Margin(0.0f, 10.0f, 0.0f, 10.0f));
«Установка трех параметров макета — LinearLayoutParameter, Gravity и Margin, затем установка параметров макета для трех внутренних виджетов UIPanel.
Здесь мы использовали линейную вертикальную схему, но каждая гравитация установлена как LinearLayoutParameter::LinearGravity::CENTER_HORIZONTAL
, которая отображается по центру по горизонтали. Margin показывает расстояние по краям, обратите внимание, что значение lp2 равно UIMargin(20, 20, 0, 5)
, что означает расстояние слева, сверху, справа и кнопки. Когда левый интервал равен 20, вы можете видеть, что позиция textButton имеет небольшое смещение вправо. За исключением направления, другие настройки вертикальной схемы размещения аналогичны горизонтальной схеме. И две схемы называются Linear Layout, они используют одни и те же параметры."