PDA

Просмотр полной версии : слушатель событий


4epen
11.08.2009, 00:06
Доброго времени.

Имею вот такой код

package {
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.net.URLRequest;

public class test extends Sprite
{
private var url:String = "img/1.jpg";

public function test()
{
var req:URLRequest = new URLRequest(url);
var loading:Loader = new Loader;

loading.load(req);
addChild(loading);
loading.addEventListener(MouseEvent.CLICK, onClick);
}
private function onClick(event:MouseEvent):void
{
event.target.x =+10;
}
}
}

после компиляции при первом клике картинка смещается, при последуюших действий не происходит. я так понял слушатель событий удаляется... токо не понял почему? подскажите пожалйста. заранее благодарен


извините можно удалять, сам нашел ошибку

wvxvw
11.08.2009, 00:36
var loading:Loader - локальная переменная функции, как только функция отработала - она "забывается", а как только отработал обработчик события - он тоже отписывается, т.как объект который его диспатчил больше не существует.

Кроме того:
- классы с прописной
- круглые скобки после вызова конструктора.

gloomyBrain
11.08.2009, 01:39
wvxvw, да и пофиг, что переменная локальная - не забудется. т.к. есть листенер для нее
а ошибка тут:event.target.x =+10;
то есть =+ это не +=

udaaff
11.08.2009, 01:46
Даже если бы не было слушателя, loading на сцену добавлен, поэтому, в любом случае, не удалится.

wvxvw
11.08.2009, 01:59
надо идти поспать :)

switcher!
11.08.2009, 11:25
несколько теоретических вопросов к теме:
1.да и пофиг, что переменная локальная - не забудется. т.к. есть листенер для нее
может быть локальная переменная все-таки "забывается", но не забывается значение объекта, который ей был назначен, и листенер, соответственно, "крепится" к объекту?


2.var loading:Loader - локальная переменная функции, как только функция отработала - она "забывается", а как только отработал обработчик события - он тоже отписывается, т.как объект который его диспатчил больше не существует.

Разве его (объект без переменной-ссылки) не должен сперва GC скушать?


3.а как только отработал обработчик события - он тоже отписывается, т.как объект который его диспатчил больше не существует.

отписывается? Если целевого объекта не существует, листнер, на сколько я это себе представляю, отписывается только либо через removeEventListener, либо насильственно через:
addEventListener(какое-то событие, какой-то обработчик, false, какой-то индекc, true);
// важен последний параметр, установленый в true
// это слабая ссылка, и GC может ею пообедать

wvxvw
11.08.2009, 11:49
@ switcher!
Да-да, вы правы, я просто недосмотрел вчера.