Форум 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=150525)

chekanios 13.02.2011 13:32

Один слушатель событий на все объекты или разные внутри класса?
 
Собственно, вопрос производительности/размера файла:

Есть много экземпляров Класса MainClass. К каждому надо придернуть одинаковое событие.
Как лучше? Так:

Код AS3:

obj1.addEventListener(MouseEvent.MOUSE_UP, mouseReleased);
...
obj9.addEventListener(MouseEvent.MOUSE_UP, mouseReleased);
 
function mouseReleased(event:MouseEvent):void {
 trace(event.target);
}

Или так (внутри класса):
Код AS3:

class MainClass extends Sprite{
...
public function MainClass(...):void{
...
this.addEventListener(MouseEvent.MOUSE_UP, mouseReleased);
}
 
private function mouseReleased(event:MouseEvent):void {
 trace(this);
}
}

Cпасибо

TanaTiX 13.02.2011 13:45

Лучше все экземпляры поместить в контейнер и создать один слушатель на контейнер с одним обработчиком событий.

chekanios 13.02.2011 14:02

не, как бы событие не совсем одинаковое. надо определять, какой именно из объектов был задет.
проще говоря, в обработчике должно стоять event.target.strartDrag() или this.startDrag()
А контейнер никакой прибавки в скорости или размере файла в этом случаи не дает

TanaTiX 13.02.2011 14:21

event.target - целевой объект события. Это то, что вам нужно, если хотите определить какой объект был "задет"
Посмотрите для сравнения еще currentTarget
http://help.adobe.com/ru_RU/AS3LCR/F...nts/Event.html

3p.station 13.02.2011 14:23

вам подсказали верный ход. и причем тут размер файла ...

Ivanaka 14.02.2011 13:10

Цитата:

Сообщение от TanaTiX (Сообщение 972975)
Лучше все экземпляры поместить в контейнер и создать один слушатель на контейнер с одним обработчиком событий.

Т.е. можно, например, повесить MOUSE_DOWN на группу а потом по currentTarget различать детей?

in4core 14.02.2011 13:25

Цитата:

Т.е. можно, например, повесить MOUSE_DOWN на группу а потом по currentTarget различать детей?
Нет.
Если только не [a1,a2,a3...] тогда можно. А если на контейнер, тогда по таргет с мауслчилдрен тру, куррент таргет ссылается на родителя

gloomyBrain 14.02.2011 13:25

Нет, currentTarget вернет того, кому вы написали addEventListener (то есть контейнер группы). А вот target - того, кто получил событие (то есть элемент группы)

PS
Если внутри элемента есть еще вложенные клипы, то есть вероятность того, что target будет ссылаться на один из них(вложенных). Для того, чтобы этого избежать, можно прописать элементам группы mouseChildren = false. Тогда event.target всегда будет ссылаться на элемент группы, а не на его детей.


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

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