|
|
|||||
Регистрация: Jun 2011
Сообщений: 13
|
Массив объектов и события.
Привет, AS я начал изучать буквально сегодня, более-менее разбираюсь, пытаюсь писать тестовые флешки для понимания языка.
Собственно написал код, который создаёт массив объектов myrow, где myrow - это квадратный movieclip, пытался повесить события на каждый объект так, чтобы при клике он выделялся красным вокруг (через GlowFilter). import flash.filters.GlowFilter; import flash.events.Event; var len:int = 100; var mas:Array = new Array(len); var gf1:GlowFilter = new GlowFilter(0xff0000, 0, 0, 0, 0, 0); var gf2:GlowFilter = new GlowFilter(0xff0000, 2, 2, 2, 2, 2); function generateWorld(len:int):void { var i:int; var j:int; for(i = 0; i < len; i++) { mas[i] = new Array(len); for (j = 0; j < len; j++) { var row:myrow = new myrow(); row.x = i * row.width; row.y = j * row.width; mas[i][j] = row; addChild(mas[i][j]); } } } function oncll (e:MouseEvent) { this.filters = [gf3]; } generateWorld(len); var i:int; var j:int; for (i = 0; i < len; i++) { for (j = 0; j < len; j++) { mas[i][j].addEventListener(MouseEvent.CLICK, oncll); } } Подскажите пожалуйста, как правильно реализовать выделение только одного объекта массива, на который был совершен клик мышкой? Пробовал прослушивать событие Event.ENTER_FRAME и внутри функции проверять положение мыши относительно каждого объекта массива циклом, но уже при массиве 50х50 ощущаются тормоза, счел это плохим кодом удалил, вот теперь пытаюсь сделать все цивильно, надеюсь поможете советом. Заранее спасибо. |
|
|||||
Регистрация: May 2010
Сообщений: 543
|
Вместо this используйте e.target
Цитата:
__________________
Вы грабите бедных людей. Парень со свирелью накажет вас. Хонгильдон (с) Последний раз редактировалось carrotoff; 16.06.2011 в 12:34. |
|
|||||
Можно было написать проще:
Вместо последних строк написать так: ... mas[i][j] = row; mas[i][j].addEventListener(MouseEvent.CLICK, oncll); addChild(mas[i][j]); ... import flash.filters.GlowFilter; import flash.events.Event; import flash.display.MovieClip; import flash.events.MouseEvent; var len:int = 100; var mas:Array = new Array(len); var gf1:GlowFilter = new GlowFilter(0xff0000, 0, 0, 0, 0, 0); var gf3:GlowFilter = new GlowFilter(0xff0000, 2, 2, 2, 2, 2); var container:MovieClip = new MovieClip(); addChild(container); function generateWorld(len:int):void { ... } container.addEventListener(MouseEvent.CLICK, oncll); function oncll (e:MouseEvent) { e.target.filters = [gf3]; } generateWorld(len); Последний раз редактировалось TWETTI; 16.06.2011 в 13:07. |
|
|||||
Регистрация: Jun 2011
Сообщений: 13
|
Спасибо.
А что значит "не пишите код в кадре", где его писать тогда и смогу ли я создавать объекты типов из библиотеки сцены? |
|
|||||
Регистрация: Jun 2011
Сообщений: 13
|
И еще, попробовал и e.target и e.currentTarget, ошибка одна:
TypeError: Error #1010: Термин не определен и не имеет свойств. at Untitled_fla::MainTimeline/oncll() (ошибка происходит при попытке клика на объекте). |
|
|||||
Цитата:
Сможете. Цитата:
|
|
|||||
package { import flash.display.DisplayObject; import flash.filters.GlowFilter; import flash.display.MovieClip; import flash.events.Event; import flash.events.MouseEvent; /* * Сохраните этот файл как TestProject.as, положите рядом с флешкой * и пропишите TestProject как Document Class вашей флешки. * В библиотеке у клипа myrow должна быть поставлена галочка * Export for ActionScript и имя класса должно быть соответственно * myrow. */ public class TestProject extends MovieClip { private const GF_2:GlowFilter = new GlowFilter(0xff0000, 2, 2, 2, 2, 2); private var len:int = 100; private var mas:Array = []; public function TestProject() { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(event:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); for(var i:int = 0; i < len; i++) { mas[i] = []; // new Array(len); for (var j:int = 0; j < len; j++) { var row:myrow = new myrow(); row.x = i * row.width; row.y = j * row.width; mas[i][j] = row; addChild(row); // addChild(mas[i][j]); // Вешаем прослушку кликов на объект myrow. row.addEventListener(MouseEvent.CLICK, oncll); } } } private function oncll (event:MouseEvent) { // Берем ссылку на объект инициировавший событие var myrow:DisplayObject = event.target as DisplayObject; // Берем его массив фильтров var fil:Array = myrow.filters; // Добавляем в него свой фильтр fil.push(GF_2); myrow.filters = fil; // Чтобы убрать фильтры делаем так: // myrow.filters = []; } } } Последний раз редактировалось bav; 16.06.2011 в 14:33. |
|
|||||
Регистрация: Jun 2011
Сообщений: 13
|
спасибо большое всем, разобрался
|
|
|||||
.
|
Лучше так
|
Часовой пояс GMT +4, время: 02:11. |
|
« Предыдущая тема | Следующая тема » |
Теги |
массив объектов , события |
|
|