![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Nov 2006
Сообщений: 253
|
Всем привет.
Столкнулся с такой проблемой при переходе на AS3: мувиклип становиться на слой 160, хотя он только один в этом случае выдает ошибку, потому что мувиклип один и в аргументе функции можно написать только 1 Все бы хорошо, но у меня глубина зависит от размера. Теперь не знаю к чему глубину привязать. Подскажите как быть
__________________
Living with the smile |
|
|||||
|
ветеран форума
|
Ну индекс это и есть глубина) В AS3 пустых индексов посреди листа делать нельзя, поэтому аналог swapDepths - swapChildren принимает 2 DisplayObject-а как аргументы. Для того чтобы вынести какой-либо элемент выше других, можно получить максимальный индекс засчет использования свойства numChildren, а затем переставить клипы в нужном порядке.
А насчет привязки - нет смысла так делать, лучше брать значения размера, упорядочивать их в массиве по возрастанию/убыванию и расставлять детей в соответствии с индексами
__________________
4am is time to rock |
|
|||||
|
Регистрация: Nov 2006
Сообщений: 253
|
понятно, просто проблема теперь чисто логическая:
есть количество мувиков, в ходе программы их размер изменяеться посредством scaleY и scaleX, теперь чем больше размер, тем выше индекс. Уже весь извелся, не могу придумать как привязать scale и номер индекса.
__________________
Living with the smile |
|
|||||
|
стервочка (я мужик)
|
привяжите массив и сортируйте в нём ваших детей. номер индекса в массиве будет соответвовать его номеру в дисплэйлисте.
|
|
|||||
|
Регистрация: Nov 2006
Сообщений: 253
|
спасибо всем за советы - буду реализовывать
![]()
__________________
Living with the smile |
|
|||||
|
Регистрация: Nov 2006
Сообщений: 253
|
чтоб не создавать новый пост решил спросить здесь:
почему-то не срабатывает, может я забыл какой то класс подключить?
__________________
Living with the smile |
|
|||||
|
стервочка (я мужик)
|
buttonMode
|
|
|||||
|
Регистрация: Nov 2006
Сообщений: 253
|
BlooDHounD, пасиба
![]()
__________________
Living with the smile |
|
|||||
|
Регистрация: 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. |
|
|
« Предыдущая тема | Следующая тема » |
|
|