Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > API приложений и сред

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 18.10.2015, 06:44
Godwarlock вне форума Посмотреть профиль Отправить личное сообщение для Godwarlock Найти все сообщения от Godwarlock
  № 1  
Ответить с цитированием
Godwarlock

Регистрация: Jan 2012
Сообщений: 836
По умолчанию as3isolib слои объектов

Всем привет. В общем что-то пока не могу разобраться, задача обстоит в порядке объектов расположенных на сцене. Надо чтобы при нажатии на кнопку, повышался уровень индекса объекта на сцене и он переграждал остальные объекты, если стоит выше.

Код AS3:
 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();
 
                     }
Но индекс не меняется и объект находится на том же месте, котором и стоял. Подскажите что не так?

Старый 18.10.2015, 11:41
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 2  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,921
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Фишка в операторе инкремента.
i++ возвращает i, а только потом добавляет к нему единицу.
++i возвращает i уже повышенную на единицу.

Код AS3:
 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.

Старый 18.10.2015, 17:16
Godwarlock вне форума Посмотреть профиль Отправить личное сообщение для Godwarlock Найти все сообщения от Godwarlock
  № 3  
Ответить с цитированием
Godwarlock

Регистрация: Jan 2012
Сообщений: 836
Что-то не помогло, объекты остаются на тех же слоях и ничего не изменяется, хотя по сути после рендера, объект с индексом ++id_obj должен был перенестись на индекс того объекта, который мы поднимаем вверх, а тот что вверху соответственно заменяет индекс того, который должен опуститься или я чет не так понял)


Последний раз редактировалось Godwarlock; 18.10.2015 в 19:18.
Старый 19.10.2015, 03:18
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 4  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,921
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Трейсните и проверьте, изменяется ли индекс вообще.
__________________
There is no thing in this world that is not simple.

Старый 19.10.2015, 03:24
Godwarlock вне форума Посмотреть профиль Отправить личное сообщение для Godwarlock Найти все сообщения от Godwarlock
  № 5  
Ответить с цитированием
Godwarlock

Регистрация: Jan 2012
Сообщений: 836
Изменяется, но к объекту не применяется

Добавлено через 42 часа 30 минут
Всё разобрался, надо поднимать/опускать по z, правда весьма муторно с точностью


Последний раз редактировалось Godwarlock; 24.10.2015 в 20:54.
Старый 24.10.2015, 20:57
Godwarlock вне форума Посмотреть профиль Отправить личное сообщение для Godwarlock Найти все сообщения от Godwarlock
  № 6  
Ответить с цитированием
Godwarlock

Регистрация: Jan 2012
Сообщений: 836
Не фига не разобрался, не устраивает вариант по z. Надо менять местами детей непосредственно в самой сцене, т.к когда объекты в сцену располагаются их глубина друг от друга явно зависит от индекса в котором они находятся, да и метод setChildIndex предназначен именно для этого. Но метод не работает.
Код AS3:
 scene.setChildIndex(targetObject, 0);
По идее объект должен поменяться местами с тем объектом, у которого index равен 0. Но ничего не меняется.

Старый 25.10.2015, 10:43
ShockWave512 вне форума Посмотреть профиль Отправить личное сообщение для ShockWave512 Посетить домашнюю страницу ShockWave512 Найти все сообщения от ShockWave512
  № 7  
Ответить с цитированием
ShockWave512

Регистрация: Dec 2007
Адрес: NA
Сообщений: 741
Отправить сообщение для ShockWave512 с помощью Skype™
влияет не только Z но и Х У плюс ширина-высота-длинна объекта
подвинуть надо ближе к камере, и вызвать метод render() у сцены

Старый 25.11.2015, 04:15
Godwarlock вне форума Посмотреть профиль Отправить личное сообщение для Godwarlock Найти все сообщения от Godwarlock
  № 8  
Ответить с цитированием
Godwarlock

Регистрация: Jan 2012
Сообщений: 836
Вернусь к вопросу, уже много чего перепробовал, но не могу придти к итогу.
Есть сцена, на сцену по очередности добавляются объекты, к примеру по такому принципу
Загружается платформа
Загружаются стены
Загружаются персонажи
Собственно у персонажа координата по z выставлена 30, в то время как у остальных объект по 0.
cellSize при этом равен 60;
В чем суть. По скольку персонажи, грузятся в последнюю очередь, они всегда будут визуально поверх всех предыдущих объектов в том числе стенок, по скольку по координате z выше на половину размера ячейки. Теперь попробуем такой вариант
Загружается платформа
Загружаются персонажи
Загружаются стены
Что получается. Персонажи выше платформы, но когда они стоят у стены, то на первой половине они визуально выше, а с другой стороны, где по идее стена должна скрывать персонажа, они становятся ниже и их видно как будто они за стеной, а не под ней. Я не могу понять почему так происходит, мне говорили что регулировать высоту над другими объектами надо по координате Z, я это сделал, но очередность создания объектов игнорирует это. И стандартными методами библиотеке, казалось бы setChildIndex ничего не решает. Я не понимаю как выставить объект по индексу, ибо в стандартной библиотеке есть такая возможность, как раз setChildIndex которая меняет визуальное отображение объекта, над предыдущим. Подскажите как мне решить эту проблему) Очень важно)

Старый 25.11.2015, 04:35
ShockWave512 вне форума Посмотреть профиль Отправить личное сообщение для ShockWave512 Посетить домашнюю страницу ShockWave512 Найти все сообщения от ShockWave512
  № 9  
Ответить с цитированием
ShockWave512

Регистрация: Dec 2007
Адрес: NA
Сообщений: 741
Отправить сообщение для ShockWave512 с помощью Skype™
- ни очередность, ни индекс не влияют на сортировку перекрытия объектов в сцене

постоянно сталкивался с такой проблемой, и вечно что то торчало поверх другого не в нужном порядке

- решается представлением всех объектов в виде боксов(прямоугольных ящиков), (а изолиб так и видит все объекты, на флешовые/старлинговые спрайты и индексы ему плевать)

тогда действуют простые правила:

- при ясно заданных координатах (X:Y:Z) и размере "ящика" (width:length:height) (ширина:длина:высота

- если из одинаковых кубов один ближе к "камере", то виден он

- если один из одинаковых кубов выше по Z, то виден он

- если один куб больше, а оба на одинаковых координатах, то виден будет больший куб

при больших количествах объектов или сложных сценах, помогает вынесение отдельных элементов в другие сцены, так же хорошо влияет на производительность, (сортировка очень тормознутая у изолиб),
например тайлы пола почти всегда можно вынести в отдельную сцену, ближние и дальние стены, фоновые объекты


Последний раз редактировалось ShockWave512; 25.11.2015 в 20:20.
Старый 25.11.2015, 06:16
Godwarlock вне форума Посмотреть профиль Отправить личное сообщение для Godwarlock Найти все сообщения от Godwarlock
  № 10  
Ответить с цитированием
Godwarlock

Регистрация: Jan 2012
Сообщений: 836
Спасибо ShockWave512, идея с представление объектов в виде боксов с фиксированным размером, вроде как избавляет от проблемы. Еще раз спасибо большое! Все работает как надо)) Сам бы хрен догадался)


Последний раз редактировалось Godwarlock; 25.11.2015 в 06:35.
Создать новую тему Ответ Часовой пояс GMT +4, время: 15:48.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 15:48.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.