teplov-it Posted September 30, 2016 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 ячейками, где в первой расположена кнопка, а в трех других - лейблы.
vermillion Posted September 30, 2016 Posted September 30, 2016 Здравствуйте.setOrder влияет на порядок отрисовки Widget'ов внутри одного VBox/HBox/GridBox контейнера. Если Widget'ы находятся в разных контейнерах, то setOrder никак не повлияет на порядок их отрисовки. Не могли бы вы отправить небольшой семпл, где воспроизводится ваша проблема?Спасибо.
teplov-it Posted September 30, 2016 Author Posted September 30, 2016 Правильно ли я в таком случае понимаю, что на контейнеры setOrder не должен работать? Просто заметил, что если сделать markerTable->setOrder(1), то кнопка и лейбл начинают отрисовываться даже поверх встроенного GUI (на скрине пример подобного поведения). Семпл в архиве не влезает через загрузку форума (архив получился около 125 МБ), через что можно Вам его отправить? Проект для отладки запускаю через VS2015.
vermillion Posted September 30, 2016 Posted September 30, 2016 Нет, setOrder работает для всех Widget'ов включая VBox/HBox/GridBox. Глобальный Gui также является VBox'ом.
silent Posted September 30, 2016 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
teplov-it Posted October 3, 2016 Author Posted October 3, 2016 Отправил сцену через ваш FTP. Заметил еще интересное поведение функции: Если вместо int order = int(-128 * (distance / renderDistance)); задать, например, int order = int(127-240 * (distance / renderDistance)); то пока order>0 у обоих виджетов, они оба рисуются поверх встроенного GUI, как только у хотя бы одного виджета order становится меньше нуля - оба виджета уходят на задний план по отношению к встроенному GUI.
vermillion Posted October 4, 2016 Posted October 4, 2016 teplov-it,Спасибо за тестовую сцену.Вызов setOrder не влияет на позицию в иерархии пока не будет вызвана функция raise или addChild.Чтобы всё заработало как следует нужно добавить вызов функции raise после setOrder: markerTable->setOrder(order); markerTable->raise(markerTable->getWidget()); В документацию добавим пример использования.Приносим вам свои извинения за доставленные неудобства.
Recommended Posts