![]() |
Задача с перебором двух массивов
Начну с описания задачи. Имеется 18 предметов (класс Value), которые надо расставить по 18 гнездам (класс Target).Соответственно, предметы содержатся в массиве termValueArray, а гнезда в массиве targetsArray. Когда предмет встает в гнездо, справа от него появляется галочка (метод checkShow принимает булево значение и отрисовывает галочку). Когда предмет вынимается из гнезда или переставляется в др. гнездо галочка должна исчезать и появляться только у занятого предметом гнезда. Перетаскивание предметов осуществляется драг-энд-дропом, при отпускании мыши (событие MOUSE_UP) в классе Value диспатчится событие, по которому начинается проверка занятых и свободных гнезд. Проблема как раз и возникла с алгоритмом этой проверки. Поначалу я думал, что задача достаточно тривиальная, и с ходу написал примерно такой код (это только одна из моих многочисленных версий):
Код AS3:
|
Можно сделать ссылку на объект Target у объекта Value если они соприкасаются.
И по идее если перемещение делается drag and drop'ом, то e.target будет как раз нужный для проверки объект. Тогда достаточно одного цикла: Код AS3:
|
По моему тут сумбур небольшой - событие onMouseUp наступает в классе Value, но идея понятна, насчет e.target я тоже думал, но ничего хорошего не придумал, попробую ваш код спасибо.
|
Основная суть такая:
- делать проверку только для перетаскиваемого объекта - сбрасывать галочку у гнезда в котором он лежал, если он лежал в каком-то из гнёзд. - проверять положили ли объект куда-нибудь. Если проверяете на MOUSE_UP в самом Value, то можете в метод проверки передавать ссылку именно на этот объект. |
только в самом Value массив targetsArray не объявлен. Мне кажется надо просто сохранять в Value ссылку на e.target, и перебирать массив уже в основном классе. Попробую, отпишусь о результатах.
Добавлено через 3 часа 32 минуты Пока не пробовал кодить, займусь этим завтра, но пока я думал над использованием e.target мне начало казаться что этот метод не сработает. Какой то бред получается, событие диспатчит экземпляр Value и он сам на себя ссылку сохраняет? А потом есть же другие предметы, и они тоже могут занимать на момент проверки гнезда - по любому надо проверять 2 массива. Хотя есть еще идея нечто подобное сделать с dropTarget Все решил проблему. Всем спасибо за помощь :-). В общем развел выставление галочки и стирание её по двум событиям (одно на MOUSE_UP другое на MOUSE_DOWN) Вот итоговый код, вроде все работает как надо: Код AS3:
|
| Часовой пояс GMT +4, время: 11:08. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.