Просмотр полной версии : Цикличное создание переменных с присвоением имени
Tetraeon
04.07.2012, 22:24
Подскажите пожалуйста как можно включить в цикл создание Boolean переменных в размере количества длинны массива?
Вот условие:
for (var q:int=0; q<enAll.length; q++)
{
var cross:Boolean = new Boolean(cross[q]);
if((this.y<enAll[q].y)&&(!cross[q]))
{
parent.swapChildren(enAll[q], this);
cross[q]=true;
}
if((this.y>enAll[q].y)
{
cross[q]=false;
}
}
Что то типа этого только в правильной форме, если такая возможна... без этих переменных экземпляры постоянно меняются местами т.к. все это находится в EnterFrame.
хоть тут можно обойтись и addChild мне очень пригодится в будущем этот прием... так сказать взять под контроль поток фреймов, иначе не представляю что может постоянно следить за выполнением условия и выполнять при совпадении действие 1 раз.
var cross:Vector<Boolean> = new Vector<Boolean>
Здесь вообще-то конфликт имен – два объекта с именем cross: локальный Boolean и массив.
Tetraeon
05.07.2012, 20:42
Помучился чуток и вот такое получилось
for (var q:int=0; q<enAll.length; q++)
{
var boo:Boolean=false;
cross.push(boo);
cross.length=enAll.length;
if((this.y<enAll[q].y)&&(cross[q]==false))
{
parent.swapChildren(this, enAll[q]);
cross[q]=true;
}
if(this.y>enAll[q].y)
{
cross[q]=false;
}
}
Сложно сказать работает или нет, но судя по трейсу в массиве нужное количество переменных Boolean типа и все они принимают свои значения. Проверить не получилось из-за (на мой взгляд) кривого условия
if(this.y>enAll[q].y)
Нужно условие в котором будит идти проверка каждого элемента массива со своими же элементами отдельно (сортировка), только по условию
for (var q:int=0; q<enAll.length; q++)
{
if((enAll["каждый"].y<enAll["каждый"].y)&&(cross[q]==false))
{
parent.swapChildren(enAll["каждый"], enAll["каждый"]);
cross[q]=true;
}
if((enAll["каждый"].y>enAll["каждый"].y)
{
cross[q]=false;
}
}
Пробовал 2 цикла, все равно не получается... хотя может просто не правильно делал)
А Вас не смущает, что после выполнения первого условия выполнится и второе?
Tetraeon
05.07.2012, 23:10
и правда... спасибо за замечание)
Как Вы собираетесь использовать в дальнейшем этот массив с булями cross?
Для чего он нужен? Просто пересортировать массив по свойству "у" не достаточно?
Tetraeon
06.07.2012, 00:16
Использовать буду так: предположим есть множество объектов движущихся по сцене и мне нужно будит отследить столкновения этих "разных" объектов с другим объектом(персонажем), при столкновении будит запускаться некое действие например "разный" урон по персонажу(в зависимости от объекта). Отследить кроме как в Enter Frame я никак не смогу, а нанесение урона должно произойти 1 раз пока объект не покинет область персонажа. Вот тут и выручит условие с булями... до этого я пользовался отдельно созданными переменными(на каждую разновидность объекта), но если разновидностей объектов будит много, мне проще написать цикл создания этих переменных кол-во которых будит равняться длине массива содержащего все виды объектов наносящих урон. Не исключено что я сейчас 5ти колесный велосипед изобрел, но на что не пойдешь ради достижения цели %)
По поводу пересортировки по Y, действительно нужно это сделать и по возрастанию значения Y добавлять в контейнер.
Добавлено через 20 часов 46 минут
Вот та волшебная функция:
public function sortChildrenByY(container:MovieClip):void
{
var i:int;
i = container.numChildren;
while(i--)
{
enAll[i] = container.getChildAt(i);
}
enAll.sortOn("y", Array.NUMERIC);
i = container.numChildren;
while(i--)
{
if (enAll[i] != container.getChildAt(i))
{
container.setChildIndex(enAll[i], i);
}
}
}
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.