Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Отдельный прослушиватель для каждого нового объекта (http://www.flasher.ru/forum/showthread.php?t=171334)

imena 14.11.2011 05:49

Отдельный прослушиватель для каждого нового объекта
 
Всем доброго утра!!!

Вопрос: у меня есть класс. В нем есть функция по добавлению новых объектов

Код AS3:

private var objects:Vector.<Shape> = new Vector.<Shape>();
 
................................................................................................
 
public function addNewObject(object:Shape):void {
        objects.push(object);
        addChild(objects[objects.length - 1]);
}

есть основной класс, в котором я создаю объект <Мой класс> и вызываю функцию МойКласс.addNewObject() столько сколько нужно.

Код AS3:

 
.........................
 
private function timerListener(e:TimerEvent):void {
 
        var s:Shape = new Shape();
        var d:uint = Math.floor(Math.random() * 100);
        s.x = Math.floor(Math.random() * 800);
        s.y = Math.floor(Math.random() * 600);
 
        s.graphics.lineStyle(1);
        s.graphics.beginFill(Math.floor(Math.random() * 0xFFFFFF));
        s.graphics.drawCircle(0, 0, d);
        s.graphics.endFill();
 
        obj.addNewObject(s);
 
}

После того как новый объект(в данном случае Shape) добавилась в список объектов(фигур) он появился на экране... мне надо чтобы он реагировал на нажатие мыши. Сделал как показано ниже, но событие не отлавливается

Код AS3:

public function addNewObject(object:Shape):void {
        objects.push(object);
        objects[objects.length - 1].addEventListener(MouseEvent.CLICK, clickListener);
        addChild(objects[objects.length - 1]);
}

Подскажите пожалуйста, как повесить прослушиватель на каждый НОВЫЙ объект?

Wolsh 14.11.2011 07:27

Видите ли, Shape не наследует от InteractiveObject. Проще говоря, он не реагирует на мышь))

BuKT 14.11.2011 07:32

Когда заходил в тему, думал что надо будет задуматься о процессе клонирования function =)
А ваша проблема решается очень просто: Перепишите addNewObject примерно как указано в нижеследующем коде:
Код AS3:

public function addNewObject(object:Shape):void {
        objects.push(object);
        var cont:Sprite = new Sprite.
        cont.addChild(objects[objects.length - 1]);
        cont.addEventListener(MouseEvent.CLICK, clickListener);
        addChild(cont);
}

Почему стоит сделать именно так - уже написал Wolsh

goodguy 14.11.2011 08:49

Зачем тогда заталкивать в массив шейп?
Логичнее будет поместить туда спрайт, и сам массив изменить на Vector.<Sprite>


п.с. и вот эту строчку:
Код AS3:

var cont:Sprite = new Sprite.

написать так:
Код AS3:

var cont:Sprite = new Sprite();

;)

Inet_PC 14.11.2011 09:22

И не
Код AS3:

cont.addChild(objects[objects.length - 1]);

а
Код AS3:

cont.addChild(object);


imena 14.11.2011 12:55

вот блин, снова я всех "удивил". )) Спасибо всем большое


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

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