Как сделать обернутый прокручиваемый текст в cocos2d-x?

У меня есть ui::Text в ui::Layout, и в зависимости от содержимого он переполняется. Я просмотрел Label::setOverflow и Label::setWrap из virtualRenderer Label ui::Text, но я не вижу способа сделать его прокручиваемым и переносимым.

Как я могу сделать прокручиваемый ui::Text, убедившись, что он правильно переносит текст?


person TankorSmash    schedule 23.09.2016    source источник


Ответы (1)


Хитрость заключается в том, чтобы вместо ui::Scrollview использовать ui::ListView только с одним элементом внутри, ui::Text. Это позволяет вам прокручивать и динамически изменять размер контейнера, когда вы меняете текстовое содержимое файла ui::Text.

Ключевым моментом является: а) установка ширины ui::Text на тот же размер, что и у его родителя ui::ListView, и высоты на 0 и б) вызов my_listview->requestDoLayout() в списке в любое время при изменении текстового содержимого, чтобы прокручиваемая область отражала это.

Вот пример того, как вы бы реализовали прокрутку большого текста в ui::Panel меньшего размера:

ui::ListView* listview = ListView::create();
my_scene->addChild(listview);
listview->setContentSize({300, 500}); //give it whatever size

ui::Text* text = ui::Text::create("[multiline content]", "fontName.ttf", 16);
text->setTextAreaSize({300, 0}); //use that same size, but use 0 height. This auto sets overflow and wrap in the backend
listview->addChild(text);
listview->requestDoLayout(); //this triggers resizing the listview to accommodate the
                             //string content. Needs to happen each time you
                             //text->setString(new_content) too.
person TankorSmash    schedule 23.09.2016