teplov-it Posted September 30, 2016 Share Posted September 30, 2016 Здравствуйте. Столкнулся со следующей проблемой: при отрисовке виджетов система странно обрабатывает setOrder. По идее чем меньше значение - тем ниже должен отрисовываться виджет, однако отрисовка все равно идет в том порядке, в котором я создавал виджеты (позже объявленный - на переднем плане). В чем может быть проблема? Куски кода, ответственные за создание объектов и setOrder, и скриншоты прилагаю. Init(): ... mark = new Poi(gui, "Ближняя кнопка"); objectName = new Poi(gui, "Дальняя кнопка"); ... Poi->Update(): int order = int(-128 * (distance / renderDistance)); // distance - расстояние между текущей позицией игрока и объектом в сцене, renderDistance - дальность прорисовки markerTable->setOrder(order); // markerTable - GridBox c 4 ячейками, где в первой расположена кнопка, а в трех других - лейблы. Link to comment
vermillion Posted September 30, 2016 Share Posted September 30, 2016 Здравствуйте.setOrder влияет на порядок отрисовки Widget'ов внутри одного VBox/HBox/GridBox контейнера. Если Widget'ы находятся в разных контейнерах, то setOrder никак не повлияет на порядок их отрисовки. Не могли бы вы отправить небольшой семпл, где воспроизводится ваша проблема?Спасибо. Link to comment
teplov-it Posted September 30, 2016 Author Share Posted September 30, 2016 Правильно ли я в таком случае понимаю, что на контейнеры setOrder не должен работать? Просто заметил, что если сделать markerTable->setOrder(1), то кнопка и лейбл начинают отрисовываться даже поверх встроенного GUI (на скрине пример подобного поведения). Семпл в архиве не влезает через загрузку форума (архив получился около 125 МБ), через что можно Вам его отправить? Проект для отладки запускаю через VS2015. Link to comment
vermillion Posted September 30, 2016 Share Posted September 30, 2016 Нет, setOrder работает для всех Widget'ов включая VBox/HBox/GridBox. Глобальный Gui также является VBox'ом. Link to comment
silent Posted September 30, 2016 Share Posted September 30, 2016 Сцену можно залить на наш фтп (данные для доступа в моей подписи), а также на любой удобный для вас файл-хостинг. Файлы из директории bin вкючать необязательно, достаточно указать на какой версии Unigine SDK нужно запустить сэмпл. Спасибо! How to submit a good bug report --- FTP server for test scenes and user uploads: ftp://files.unigine.com user: upload password: 6xYkd6vLYWjpW6SN Link to comment
teplov-it Posted October 3, 2016 Author Share Posted October 3, 2016 Отправил сцену через ваш FTP. Заметил еще интересное поведение функции: Если вместо int order = int(-128 * (distance / renderDistance)); задать, например, int order = int(127-240 * (distance / renderDistance)); то пока order>0 у обоих виджетов, они оба рисуются поверх встроенного GUI, как только у хотя бы одного виджета order становится меньше нуля - оба виджета уходят на задний план по отношению к встроенному GUI. Link to comment
vermillion Posted October 4, 2016 Share Posted October 4, 2016 teplov-it,Спасибо за тестовую сцену.Вызов setOrder не влияет на позицию в иерархии пока не будет вызвана функция raise или addChild.Чтобы всё заработало как следует нужно добавить вызов функции raise после setOrder: markerTable->setOrder(order); markerTable->raise(markerTable->getWidget()); В документацию добавим пример использования.Приносим вам свои извинения за доставленные неудобства. Link to comment
Recommended Posts