![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: May 2012
Сообщений: 166
|
Здравствуйте, данная тема не раз поднималась уже на форуме и я все их перечитал (или не понял), но так и не сумел придумать верный вариант сортировки изометрического редактора карт.
Вот к чему я пришел: for (var col:int=0; col<slots; col++) { for (var row:int=0; row<slots; row++) { for (var i:int=0; i<objArr.length; i++) { if (objArr[i] == grid[col][row].targ) { container.addChild(objArr[i]); } } } } Данный код сканирует изометрическую сетку по столбцам и добавляет находящиеся на клетках объекты поочередно вот в такой последовательности: col row 0 0 0 1 0 2 1 0 1 1 1 2 Этот вариант не подходит для объектов имеющих огромные размеры (23x10) и т.д. Я в тупике.. подскажите какие есть еще варианты?
__________________
Выражаю благодарность всем, кто помогают новичкам. Ваша бескорыстная помощь внушает уважение. Последний раз редактировалось Tetraeon; 02.12.2012 в 22:14. |
|
|||||
|
Регистрация: Jul 2009
Сообщений: 15
|
По моему ваш код и так заработает, на один цикл меньше и в n раз быстрее:
for (var col:int=0; col<slots; col++) { for (var row:int=0; row<slots; row++) { if (grid[col][row].targ) { container.addChild(grid[col][row].targ); } } } // каждый объект имеет координаты x,y и параметр zIndex obj.x = 3; obj.y = 34; obj.zIndex = obj.x + obj.y * 10000; // сортируем все объекты по zIndex objArr.sortOn("zIndex", Array.NUMERIC) // массив содержит уже отсортрованные объекты, просто добавляем for each(var o in objArr) container.addChild(o) |
|
|||||
|
Регистрация: May 2012
Сообщений: 166
|
Как можно применить ваш код если объект размером 23х10 ? Указывая X и Y объекта мы имеем ввиду точку регистрации изображения? В какую часть изображения нужно ставить точку регистрации?
У меня например на длинные объекты "налазят" высокие объекты. И как быть с обхектами чей zIndex будит равен и они будут пересикаться?
__________________
Выражаю благодарность всем, кто помогают новичкам. Ваша бескорыстная помощь внушает уважение. |
|
|||||
|
Регистрация: Jul 2009
Сообщений: 15
|
Цитата:
От размера поля ничего не зависит, у меня одномерный массив используется. Т.е. не нужно никакой инициализации согласно максимальному размеру. Ну если уж быть совсем точным, то максимальный размер поля получился (10000 - 1), но число 10000 случайное в принципе. Под X,Y надо понимать верхнюю точку, т.е. наиболее близкую к началу координат. Начало координат обычно сверху располагается: http://code.google.com/p/as3isolib/w...b_tutorial_005 Соответственно, у объекта есть его "экранные" координаты, ну обычные флешовые, которые отсчитываются от левого верхнего угла экрана. И координаты в пространстве (у кубика на ссылке выше координаты в пространстве например близки к 0,0 - т.е. он недалеко от начала координат). У вас не будет объектов с одинаковым zIndex Это возможно только в том случае, если у двух объектов одни и те же координатыБиблиотека as3 isolib должна подойти для вашей задачи |
|
|||||
|
Регистрация: May 2012
Сообщений: 166
|
Спасибо)
__________________
Выражаю благодарность всем, кто помогают новичкам. Ваша бескорыстная помощь внушает уважение. |
![]() |
![]() |
Часовой пояс GMT +4, время: 00:33. |
|
|
« Предыдущая тема | Следующая тема » |
|
|