|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Mar 2008
Сообщений: 7
|
z index или глубина объектов в 3д пространстве
абсолютно не понимаю новый флеш хелп в котором ищет гугл, нифига не могу найти, в старом флеше хелп был так легко юзабелен зачем они решили его переделать..
nuff spam, вот проблема: у меня скажем есть 20 шариков внутри объекта, этот объект можно крутить с помощью мышки, как пересчитывать глубину у дочерних объектов, чтобы они правильно накладывались друг на друга? какие проперти смотреть? |
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
Встроенных алгоритмов сортировки нету. Пишите свой.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
Регистрация: Mar 2008
Сообщений: 7
|
да я в курсе, спасибо, я имею ввиду на какие проперти ориентироваться, короче начать с чего
может можно узнать глобальную z-координату объекта как-то? или возможно стОит изменить подход, и крутить камеру вокруг объекта в пространстве? это возможно? если да то как, с чего начать? Последний раз редактировалось randoms; 30.10.2009 в 19:43. |
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
silin.fatal.ru
у него посмотрите реализацию.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
я думаю, что самое простое это:
но до конца не уверен Добавлено через 5 минут да, еще: в общем случае одной z-координаты мало, надо сортировать по расстоянию от наблюдателя (transform.perspectiveProjection) |
|
|||||
Регистрация: Mar 2008
Сообщений: 7
|
спасибо, кажется сдвинулось с мёртвого места
|
|
|||||
Регистрация: Mar 2008
Сообщений: 7
|
пересчёт глубины оказался неимоверно прост..
function reorder():void{ //faces это массив спрайтов for(var ind:uint = 0; ind < 6; ind++){ this.faces[ind].tempz = this.faces[ind].transform.getRelativeMatrix3D(root).position.z; this.mainMc.removeChild(this.faces[ind]); } this.faces.sortOn("tempz", Array.NUMERIC | Array.DESCENDING); for(ind = 0; ind < 6; ind++){ this.mainMc.addChild(this.faces[ind]); } } |
|
|||||
Регистрация: Apr 2007
Адрес: Новосибирск
Сообщений: 98
|
Подскажите, так быстрее будет работать?
function reorder():void{ //faces это массив спрайтов for(var ind:uint = 0; ind < 6; ind++){ this.faces[ind].tempz = this.faces[ind].transform.getRelativeMatrix3D(root).position.z; } this.faces.sortOn("tempz", Array.NUMERIC | Array.DESCENDING); for(ind = 0; ind < 6; ind++){ this.mainMc.setChildIndex(this.faces[ind],ind); } } |
|
|||||
по моим тестам узкое место не столько в перетасовке дисплейлиста, сколько в самой сортировке,
имо, так будет быстре function reorder():void{ //faces это массив спрайтов var sortArr:Array = []; for(var ind:uint = 0; ind < 6; ind++){ //this.faces[ind].tempz = this.faces[ind].transform.getRelativeMatrix3D(root).position.z; sortArr[ind]=this.faces[ind].transform.getRelativeMatrix3D(root).position.z; } //this.faces.sortOn("tempz", Array.NUMERIC | Array.DESCENDING); var indArr:Array = sortArr.sort(Array.NUMERIC | Array.RETURNINDEXEDARRAY); ind = indArr.length - 1; while(ind--)this.mainMc.addChild(faces[ind]); } Последний раз редактировалось silin; 12.04.2010 в 09:24. |
Часовой пояс GMT +4, время: 10:36. |
|
« Предыдущая тема | Следующая тема » |
|
|