PDA

Просмотр полной версии : addEventListener


DimG
06.11.2007, 01:05
Доброго времени суток!
Возможно, этот вопрос уже задавался, но найти ничего не смог.
Такой вот вопрос: класс first:

package main
{
import flash.display.*;
import flash.events.*;
import main.*;

public class first extends MovieClip
{
public function first():void
{
this.name = "firstMC";
var a:second = new second();
addChild(a);
a.addEventListener(,ef);
}

private function ef(e:Event)
{
trace("I'm:" + this.name);
this.x++;
}
}
}



класс second:

package main
{
import flash.display.*;
import flash.events.*;
public class second extends MovieClip
{
public function second():void
{
this.name = "SecondMC";
}

private function ef(e:Event)
{
trace("I'm:" + this.name);
}
}
}


проблема заключается в том,что трейс пишет "FirstMC"Ю хотя я регистрирую слушатель на класс second. Как это понимать? Или, независимо от того,что я написал в "объекте", команда "объект".addEventListener(....) интерпретируется как "addEventListener(....)" и назначается слушатель к объекту, откуда назначается слушатель, т.е. в данном случае объекту типа first?

etc
06.11.2007, 01:29
Код синтаксически неверен.
Названия классов должны начинаться строго с большой буквы.

2morrowMan
06.11.2007, 11:50
Просто надо почитать в хелпе что такое this !

7thsky™
06.11.2007, 13:09
DimG: В as3 в отличие от ас1/ас2, функция сохраняет свой scope, то есть this в теле функции будет всегда указывать на экземпляр класса в котором она определена.

Для твоих целей можно использовать Event#target, Event#currentTarget.


package main {
import flash.display.*;
import flash.events.*;
import main.*;

public class first extends MovieClip {
....
private function ef(e:Event) {
trace("I'm:" + this.name);
trace('Event Dispatcher: ' + e.target);
this.x++;
}
}
}

DimG
06.11.2007, 15:10
Спасибо!С этим разобрался.Попутный вопрос:
получается,что [object].addEventListener(...,ef) регистрирует слушателем [object],но при этом вызывает фунуцию, являющуюся не методом [object], а методом класса в котором дается команда addEventListner,верно?

2morrowMan
06.11.2007, 19:46
Нефига не понял че ты написал, че и где что регистрирует... Пишу по своему.
Например:

myObject.addEventListener(MouseEvent.CLICK, onClick);
function onClick(event:MouseEvent):void
{
//...
}

Здесь мы подписались на прослушывание события "MouseEvent.CLICK" у объекта myObject. Теперь при возникновении события MouseEvent.CLICK, будет вызвана функция onClick().

†‡Paladin‡†
06.11.2007, 19:50
Спасибо!С этим разобрался.Попутный вопрос:
получается,что [object].addEventListener(...,ef) регистрирует слушателем [object],но при этом вызывает фунуцию, являющуюся не методом [object], а методом класса в котором дается команда addEventListner,верно?
Нет. Это значит, что к объекту [object], который диспатчит эвент мы назначаем обработчик события (любом метод любого класса, которому необходимо знать о совершении события)

DimG
08.11.2007, 23:23
Спасибо за ответы, очень выручили!
Еще один вопрос: если есть два файла: main.as и Second.as, (main - Document Class, Second обычные класс,наследуются от InteractiveObject), в первом создается объект object:Second, и добавляется листенер посредством команды object.addEventListener(Event.ENTER_FRAME,ef).
Теперь к делу: как удалить этот лисэнер, работая в файле Second.as? Нужно использовать ссылку на ф-ию ef относительно данного объекта?Если так, то как ее получить?
Объясните, пожалуйста!

Заранее благодарен!

†‡Paladin‡†
09.11.2007, 00:51
сделай 3й класс который будет руководить остальными двумя. Это имхо правильней.

DimG
09.11.2007, 10:31
Спасибо, так и сделаю. Ну а вообще такое возможно?(удалять лисэнэр посредством передачи команде removeEventListener относительносй ссылки на ф-ию- метод другого класса? )