![]() |
|
||||||||||
|
|||||
|
Вот написал код для создания светодиодной матрицы
Определённые лампочки загораются, когда с ними пересекается полностью прозрачный мувиклип. import flash.display.MovieClip; import flash.events.Event; // Получаем размер рабочей области var w:Number = st.width; var h:Number = st.height; // Определяем размер светодиода var LEDsize = 5; //Зазор между светодиодами var LEDgap:Number = LEDsize + 1; // Определяем отступы от краев раб.обл.(слева и сверху); размер светодиода делённый надвое var identX:Number = LEDsize / 2; var identY:Number = identX; // Колличество светодиодов по горизонтали var LEDamtX:Number = Math.ceil(w / LEDgap); // Колличество светодиодов по вертикали var LEDamtY:Number = Math.ceil(h / LEDgap); // Строим сетку из светодиодов: //сначала вертикаль for (var i:int=0; i<LEDamtX; i++) { //затем горизонталь for (var n:int=0; n<LEDamtY; n++) { // Создаём светодиодную матрицу из заранне заготовленных мувиклипов var LED_off:led_off = new led_off(); var xn:Number = i * LEDgap + identX; var yn:Number = n * LEDgap + identY; LED_off.x = xn; LED_off.y = yn; LED_off.width = LEDsize; LED_off.height = LEDsize; trace(xn); trace(yn); addChild(LED_off); //Сразу за ним создается слой с включеным светодиодом var LED_on:led_on = new led_on(); LED_on.x = xn; LED_on.y = yn; LED_on.width = LEDsize; LED_on.height = LEDsize; addChild(LED_on); //делаем слой с СВЕТОДИОДОМ невидимым LED_on.visible = false; /* ДО ЭТОГО МЕСТА ПРОГРАММА РАБОТАЕТ!*/ //Создаем событие ENTER_FRAME, благодаря которому в при смене кадра будет проверяться "не пересекается с ней клип LED_on", если да, то делает клип LED_on видимым. Если не пересекает, то клип LED_on остаётся невидимым. addEventListener(Event.ENTER_FRAME, ver); function ver(e:Event):void { if (ScrArea2.hitTestObject(LED_on),true) //ScrArea2 - зараннее заготовленный мувик с анимацией { LED_on.visible = true; } else { //иначе диод выключен LED_on.visible = false; } } } } |
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Что-то вообще жесть какая-то.
Обработчик события и добавление слушателя ENTER_FRAME внутри цикла.. Это делать ни в коем случае нельзя. |
|
|||||
|
Регистрация: Jul 2011
Сообщений: 67
|
Думаю стоит создать класс диода с функциями загорания и потухания, далее забить сколько нужно диодов в массив, разместить их как нужно и проверять каждый диод на столкновение с нужным вам объектом в цикле, если столкновение есть вызывать функцию загорания если нет то потухания.
|
|
|||||
|
Цитата:
Просто у меня надежда поправить этот алгоритм. |
|
|||||
|
Регистрация: Jul 2011
Сообщений: 67
|
В этом алгоритме вы развели много мусора и слушателей, от которых ни как нельзя будет отписаться в будущем => остановить процесс, который они реализуют будет невозможно, не говоря о потребляемой памяти.
Лучше организовать код так: private function addDiods(arr:Array, num:uint) { for (var i:int = 0; i < num; i++) { arr.push(new Diod()); //тут создаются экземпляры класса "Diod" addChild(arr[arr.length - 1]); } } private function diodPos(arr:Array, cols:int, startPoint:Point, interval:int = 10):void { for (var i:int = 0, j:int = 0, k:int = 0 ; j < arr.length; i++, j++) { if (i > (cols-1)) { i = -1; j--; k++; }else { (arr[j] as Sprite).x = startPoint.x + (i * (arr[j] as Sprite).width) + (i * interval); (arr[j] as Sprite).y = startPoint.y + (k * (arr[j] as Sprite).height) + (k* interval); } } } private function diodColision(arr:Array, obj:*):void { for (var i:int = 0; i < arr.length; i++) { if ( (arr[i] as Diod).hitTestObject(obj)) { (arr[i] as Diod).light(); //светись }else { (arr[i] as Diod).dark(); //потухни } } } private function enterFrameListener(e:Event) { diodColision(diodArray, hitObgect); } |
![]() |
![]() |
Часовой пояс GMT +4, время: 23:44. |
|
|
« Предыдущая тема | Следующая тема » |
|
|