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

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

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

Регистрация: Nov 2006
Сообщений: 253
По умолчанию setChildIndex() - как правильно

Всем привет.
Столкнулся с такой проблемой при переходе на AS3:

Код:
movie.swapDepths(Math.round(this._xscale) + 100); // = 160
мувиклип становиться на слой 160, хотя он только один

Код:
this.setChildIndex(movie, Math.round(thumb.scaleX*100)+100);// = 160
в этом случае выдает ошибку, потому что мувиклип один и в аргументе функции можно написать только 1

Все бы хорошо, но у меня глубина зависит от размера.
Теперь не знаю к чему глубину привязать.
Подскажите как быть
__________________
Living with the smile

Старый 25.05.2008, 17:29
fljot вне форума Посмотреть профиль Отправить личное сообщение для fljot Найти все сообщения от fljot
  № 2  
Ответить с цитированием
fljot

блогер
Регистрация: Jul 2007
Сообщений: 940
Записей в блоге: 3
в AS3 нету слоёв и глубин.
DisplayObjectContainer может иметь детей, каждый из которых будет иметь индекс. индексы от 0 и больше. детей с одинаковым индексом быть не может.
прочитайте про концепцию Display List

Старый 25.05.2008, 17:41
DarkLight вне форума Посмотреть профиль Отправить личное сообщение для DarkLight Посетить домашнюю страницу DarkLight Найти все сообщения от DarkLight
  № 3  
Ответить с цитированием
DarkLight
ветеран форума
 
Аватар для DarkLight

Регистрация: May 2006
Адрес: Москва
Сообщений: 2,978
Отправить сообщение для DarkLight с помощью ICQ Отправить сообщение для DarkLight с помощью Skype™
Ну индекс это и есть глубина) В AS3 пустых индексов посреди листа делать нельзя, поэтому аналог swapDepths - swapChildren принимает 2 DisplayObject-а как аргументы. Для того чтобы вынести какой-либо элемент выше других, можно получить максимальный индекс засчет использования свойства numChildren, а затем переставить клипы в нужном порядке.

А насчет привязки - нет смысла так делать, лучше брать значения размера, упорядочивать их в массиве по возрастанию/убыванию и расставлять детей в соответствии с индексами
__________________
4am is time to rock

Старый 25.05.2008, 17:42
Ar4ibald вне форума Посмотреть профиль Отправить личное сообщение для Ar4ibald Найти все сообщения от Ar4ibald
  № 4  
Ответить с цитированием
Ar4ibald
 
Аватар для Ar4ibald

Регистрация: Nov 2006
Сообщений: 253
понятно, просто проблема теперь чисто логическая:
есть количество мувиков, в ходе программы их размер изменяеться посредством scaleY и scaleX, теперь чем больше размер, тем выше индекс. Уже весь извелся, не могу придумать как привязать scale и номер индекса.
__________________
Living with the smile

Старый 25.05.2008, 17:57
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 5  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
привяжите массив и сортируйте в нём ваших детей. номер индекса в массиве будет соответвовать его номеру в дисплэйлисте.

Старый 25.05.2008, 18:13
Ar4ibald вне форума Посмотреть профиль Отправить личное сообщение для Ar4ibald Найти все сообщения от Ar4ibald
  № 6  
Ответить с цитированием
Ar4ibald
 
Аватар для Ar4ibald

Регистрация: Nov 2006
Сообщений: 253
спасибо всем за советы - буду реализовывать
__________________
Living with the smile

Старый 25.05.2008, 22:33
Ar4ibald вне форума Посмотреть профиль Отправить личное сообщение для Ar4ibald Найти все сообщения от Ar4ibald
  № 7  
Ответить с цитированием
Ar4ibald
 
Аватар для Ar4ibald

Регистрация: Nov 2006
Сообщений: 253
чтоб не создавать новый пост решил спросить здесь:
Код:
picholder.useHandCursor = true; // picholder - мувиклип
почему-то не срабатывает, может я забыл какой то класс подключить?
__________________
Living with the smile

Старый 26.05.2008, 00:04
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 8  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
buttonMode

Старый 26.05.2008, 01:10
Ar4ibald вне форума Посмотреть профиль Отправить личное сообщение для Ar4ibald Найти все сообщения от Ar4ibald
  № 9  
Ответить с цитированием
Ar4ibald
 
Аватар для Ar4ibald

Регистрация: Nov 2006
Сообщений: 253
BlooDHounD, пасиба
__________________
Living with the smile

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

Регистрация: Mar 2008
Сообщений: 259
Если интересно, могу подсказать с реализацией достаточно быстро работающего zOrder, если наследовать класс от MovieClip, можно модифицировать под независимый класс:

Код:
private var zOrder:Array = new Array;

public function addChildZOrder(child:DisplayObject,zo:int):DisplayObject
{
	if (contains(child)) 
		return child;
	var i:int = arrayBSearch(zOrder,zo);
	arrayInsert(zOrder,i,zo);
	super.addChildAt(child,i);
}

override public function removeChild(child:DisplayObject):DisplayObject
{
	if (this.contains(child)) {
		var i:int = getChildIndex(child);
		return this.removeChildAt(i);
	}
	else {
		return null;
	}
}

override public function removeChildAt(index:int):DisplayObject
{
	arrayDelete(zOrder,index);
	return super.removeChildAt(index);
}

public static function arrayInsert(arr:Array,i:int,elem:*):void
{
	for(var j:int=arr.length; j > i; --j)
		arr[j] = arr[j-1];
  	arr[i] = elem;
}

public static function arrayDelete(arr:Array, i:int):void
{
  	if(i >= 0){
	for(; i+1 < arr.length; i++){
  		arr[i] = arr[i+1];
	}
	if(i < arr.length)
  		arr.length = arr.length - 1;
  	}
}

public static function arrayBSearch(arr:Array, val:int, property:String=null, bound:Boolean=true):int
{
	var ret:int;
  	var l:int = 0, u:int = arr.length - 1, i:int;
  	ret = -1;
  	while(l <= u){
	    i = (l + u) >> 1;
	    var s:int = (property == null ? arr[i] : arr[i][property]);
	    if     (s > val) u=i-1;
	    else if(s < val) l=i+1;
		else{ ret = i; break; }
  	}
  	if(ret < 0 && bound)
		ret = l;
  	return ret;
}

Создать новую тему Ответ Часовой пояс GMT +4, время: 21:14.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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