![]() |
|
||||||||||
|
|||||
|
Регистрация: Jan 2012
Сообщений: 836
|
Всем привет. В общем что-то пока не могу разобраться, задача обстоит в порядке объектов расположенных на сцене. Надо чтобы при нажатии на кнопку, повышался уровень индекса объекта на сцене и он переграждал остальные объекты, если стоит выше.
private function upLayer(e:MouseEvent):void { id_obj = scene.getChildIndex(targetObject); scene.setChildIndex(targetObject, id_obj++); //scene:IsoScene, targetObject:IsoDisplayObject - ссылка на объект уровень которого надо повысить среди остальных объектов сцены scene и id_obj текущий индекс targetObject, который мы прибавляем чтобы переставить объект на уровень выше scene.render(); } |
|
|||||
|
Фишка в операторе инкремента.
i++ возвращает i, а только потом добавляет к нему единицу. ++i возвращает i уже повышенную на единицу. private function upLayer(e:MouseEvent):void { id_obj = scene.getChildIndex(targetObject); scene.setChildIndex(targetObject, ++id_obj); //scene:IsoScene, targetObject:IsoDisplayObject - ссылка на объект уровень которого надо повысить среди остальных объектов сцены scene и id_obj текущий индекс targetObject, который мы прибавляем чтобы переставить объект на уровень выше scene.render(); }
__________________
There is no thing in this world that is not simple. |
|
|||||
|
Регистрация: Jan 2012
Сообщений: 836
|
Что-то не помогло, объекты остаются на тех же слоях и ничего не изменяется, хотя по сути после рендера, объект с индексом ++id_obj должен был перенестись на индекс того объекта, который мы поднимаем вверх, а тот что вверху соответственно заменяет индекс того, который должен опуститься или я чет не так понял)
Последний раз редактировалось Godwarlock; 18.10.2015 в 19:18. |
|
|||||
|
Регистрация: Jan 2012
Сообщений: 836
|
Изменяется, но к объекту не применяется
Добавлено через 42 часа 30 минут Всё разобрался, надо поднимать/опускать по z, правда весьма муторно с точностью Последний раз редактировалось Godwarlock; 24.10.2015 в 20:54. |
|
|||||
|
Регистрация: Jan 2012
Сообщений: 836
|
Не фига не разобрался, не устраивает вариант по z. Надо менять местами детей непосредственно в самой сцене, т.к когда объекты в сцену располагаются их глубина друг от друга явно зависит от индекса в котором они находятся, да и метод setChildIndex предназначен именно для этого. Но метод не работает.
По идее объект должен поменяться местами с тем объектом, у которого index равен 0. Но ничего не меняется. |
|
|||||
|
влияет не только Z но и Х У плюс ширина-высота-длинна объекта
подвинуть надо ближе к камере, и вызвать метод render() у сцены |
|
|||||
|
Регистрация: Jan 2012
Сообщений: 836
|
Вернусь к вопросу, уже много чего перепробовал, но не могу придти к итогу.
Есть сцена, на сцену по очередности добавляются объекты, к примеру по такому принципу Загружается платформа Загружаются стены Загружаются персонажи Собственно у персонажа координата по z выставлена 30, в то время как у остальных объект по 0. cellSize при этом равен 60; В чем суть. По скольку персонажи, грузятся в последнюю очередь, они всегда будут визуально поверх всех предыдущих объектов в том числе стенок, по скольку по координате z выше на половину размера ячейки. Теперь попробуем такой вариант Загружается платформа Загружаются персонажи Загружаются стены Что получается. Персонажи выше платформы, но когда они стоят у стены, то на первой половине они визуально выше, а с другой стороны, где по идее стена должна скрывать персонажа, они становятся ниже и их видно как будто они за стеной, а не под ней. Я не могу понять почему так происходит, мне говорили что регулировать высоту над другими объектами надо по координате Z, я это сделал, но очередность создания объектов игнорирует это. И стандартными методами библиотеке, казалось бы setChildIndex ничего не решает. Я не понимаю как выставить объект по индексу, ибо в стандартной библиотеке есть такая возможность, как раз setChildIndex которая меняет визуальное отображение объекта, над предыдущим. Подскажите как мне решить эту проблему) Очень важно) |
|
|||||
|
- ни очередность, ни индекс не влияют на сортировку перекрытия объектов в сцене
постоянно сталкивался с такой проблемой, и вечно что то торчало поверх другого не в нужном порядке - решается представлением всех объектов в виде боксов(прямоугольных ящиков), (а изолиб так и видит все объекты, на флешовые/старлинговые спрайты и индексы ему плевать) тогда действуют простые правила: - при ясно заданных координатах (X:Y:Z) и размере "ящика" (width:length:height) (ширина:длина:высота - если из одинаковых кубов один ближе к "камере", то виден он - если один из одинаковых кубов выше по Z, то виден он - если один куб больше, а оба на одинаковых координатах, то виден будет больший куб при больших количествах объектов или сложных сценах, помогает вынесение отдельных элементов в другие сцены, так же хорошо влияет на производительность, (сортировка очень тормознутая у изолиб), например тайлы пола почти всегда можно вынести в отдельную сцену, ближние и дальние стены, фоновые объекты Последний раз редактировалось ShockWave512; 25.11.2015 в 20:20. |
|
|||||
|
Регистрация: Jan 2012
Сообщений: 836
|
Спасибо ShockWave512, идея с представление объектов в виде боксов с фиксированным размером, вроде как избавляет от проблемы. Еще раз спасибо большое! Все работает как надо)) Сам бы хрен догадался)
Последний раз редактировалось Godwarlock; 25.11.2015 в 06:35. |
![]() |
![]() |
Часовой пояс GMT +4, время: 15:48. |
|
|
« Предыдущая тема | Следующая тема » |
|
|