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

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

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

Регистрация: Mar 2008
Сообщений: 7
По умолчанию z index или глубина объектов в 3д пространстве

абсолютно не понимаю новый флеш хелп в котором ищет гугл, нифига не могу найти, в старом флеше хелп был так легко юзабелен зачем они решили его переделать..

nuff spam, вот проблема:
у меня скажем есть 20 шариков внутри объекта,
этот объект можно крутить с помощью мышки,
как пересчитывать глубину у дочерних объектов, чтобы они правильно накладывались друг на друга?
какие проперти смотреть?

Старый 30.10.2009, 19:30
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 2  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Встроенных алгоритмов сортировки нету. Пишите свой.

Старый 30.10.2009, 19:38
randoms вне форума Посмотреть профиль Отправить личное сообщение для randoms Найти все сообщения от randoms
  № 3  
Ответить с цитированием
randoms

Регистрация: Mar 2008
Сообщений: 7
да я в курсе, спасибо, я имею ввиду на какие проперти ориентироваться, короче начать с чего
может можно узнать глобальную z-координату объекта как-то?
или возможно стОит изменить подход, и крутить камеру вокруг объекта в пространстве? это возможно? если да то как, с чего начать?


Последний раз редактировалось randoms; 30.10.2009 в 19:43.
Старый 30.10.2009, 19:52
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 4  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
silin.fatal.ru
у него посмотрите реализацию.

Старый 30.10.2009, 20:04
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 5  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
я думаю, что самое простое это:
Код AS3:
Utils3D.projectVector(obj.transform.getRelativeMatrix3D(root), new Vector3D())
но до конца не уверен

Добавлено через 5 минут
да, еще: в общем случае одной z-координаты мало, надо сортировать по расстоянию от наблюдателя (transform.perspectiveProjection)

Старый 31.10.2009, 00:51
randoms вне форума Посмотреть профиль Отправить личное сообщение для randoms Найти все сообщения от randoms
  № 6  
Ответить с цитированием
randoms

Регистрация: Mar 2008
Сообщений: 7
спасибо, кажется сдвинулось с мёртвого места

Старый 15.11.2009, 05:54
randoms вне форума Посмотреть профиль Отправить личное сообщение для randoms Найти все сообщения от randoms
  № 7  
Ответить с цитированием
randoms

Регистрация: Mar 2008
Сообщений: 7
пересчёт глубины оказался неимоверно прост..
Код AS3:
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]);
	}
 
}

Старый 12.04.2010, 01:48
O.K. вне форума Посмотреть профиль Отправить личное сообщение для O.K. Найти все сообщения от O.K.
  № 8  
Ответить с цитированием
O.K.

Регистрация: Apr 2007
Адрес: Новосибирск
Сообщений: 98
Подскажите, так быстрее будет работать?

Код AS3:
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);
	}
 
}

Старый 12.04.2010, 09:13
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 9  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
по моим тестам узкое место не столько в перетасовке дисплейлиста, сколько в самой сортировке,
имо, так будет быстре
Код AS3:
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]);
 
}
ps. хотя на шести объектах вряд ли это будет заметно, вот для 600..


Последний раз редактировалось silin; 12.04.2010 в 09:24.
Создать новую тему Ответ Часовой пояс GMT +4, время: 10:36.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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