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

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

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

Регистрация: May 2012
Сообщений: 166
Question Цикличное создание переменных с присвоением имени

Подскажите пожалуйста как можно включить в цикл создание Boolean переменных в размере количества длинны массива?
Вот условие:
Код AS3:
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 раз.
__________________
Выражаю благодарность всем, кто помогают новичкам. Ваша бескорыстная помощь внушает уважение.

Старый 05.07.2012, 00:56
gagaga вне форума Посмотреть профиль Отправить личное сообщение для gagaga Найти все сообщения от gagaga
  № 2  
Ответить с цитированием
gagaga
[+1 22.04.13]
[+1 06.03.13]

Регистрация: Apr 2012
Сообщений: 239
Код AS3:
var cross:Vector<Boolean> = new Vector<Boolean>

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Здесь вообще-то конфликт имен – два объекта с именем cross: локальный Boolean и массив.
__________________
Reality.getBounds(this);

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

Регистрация: May 2012
Сообщений: 166
Помучился чуток и вот такое получилось
Код AS3:
					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 типа и все они принимают свои значения. Проверить не получилось из-за (на мой взгляд) кривого условия
Код AS3:
if(this.y>enAll[q].y)
Нужно условие в котором будит идти проверка каждого элемента массива со своими же элементами отдельно (сортировка), только по условию
Код AS3:
					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 цикла, все равно не получается... хотя может просто не правильно делал)
__________________
Выражаю благодарность всем, кто помогают новичкам. Ваша бескорыстная помощь внушает уважение.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
А Вас не смущает, что после выполнения первого условия выполнится и второе?
__________________
Reality.getBounds(this);

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

Регистрация: May 2012
Сообщений: 166
и правда... спасибо за замечание)
__________________
Выражаю благодарность всем, кто помогают новичкам. Ваша бескорыстная помощь внушает уважение.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Как Вы собираетесь использовать в дальнейшем этот массив с булями cross?
Для чего он нужен? Просто пересортировать массив по свойству "у" не достаточно?
__________________
Reality.getBounds(this);

Старый 06.07.2012, 00:16
Tetraeon вне форума Посмотреть профиль Отправить личное сообщение для Tetraeon Найти все сообщения от Tetraeon
  № 8  
Ответить с цитированием
Tetraeon

Регистрация: May 2012
Сообщений: 166
Использовать буду так: предположим есть множество объектов движущихся по сцене и мне нужно будит отследить столкновения этих "разных" объектов с другим объектом(персонажем), при столкновении будит запускаться некое действие например "разный" урон по персонажу(в зависимости от объекта). Отследить кроме как в Enter Frame я никак не смогу, а нанесение урона должно произойти 1 раз пока объект не покинет область персонажа. Вот тут и выручит условие с булями... до этого я пользовался отдельно созданными переменными(на каждую разновидность объекта), но если разновидностей объектов будит много, мне проще написать цикл создания этих переменных кол-во которых будит равняться длине массива содержащего все виды объектов наносящих урон. Не исключено что я сейчас 5ти колесный велосипед изобрел, но на что не пойдешь ради достижения цели %)

По поводу пересортировки по Y, действительно нужно это сделать и по возрастанию значения Y добавлять в контейнер.

Добавлено через 20 часов 46 минут
Вот та волшебная функция:
Код AS3:
					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);
							}
						}
					}
__________________
Выражаю благодарность всем, кто помогают новичкам. Ваша бескорыстная помощь внушает уважение.


Последний раз редактировалось Tetraeon; 06.07.2012 в 20:25.
Создать новую тему Ответ Часовой пояс GMT +4, время: 19:34.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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