Пользовательский eventListener Flash AS3 - PullRequest
0 голосов
/ 19 мая 2011

Не уверен, что это лучший вариант, но подумал, может быть, я мог бы использовать EventListener, который сэкономил бы некоторое время. Я загружаю XML-файл один раз в секунду и хочу, чтобы там были триггеры, если в XML есть конкретные значения. У меня есть это:

//TIMER THAT LOADS XML ONCE A SECOND
var myXML:XML;
var myLoader:URLLoader = new URLLoader();

var myTimer:Timer = new Timer(100,2); // 1 second
myTimer.addEventListener(TimerEvent.TIMER, runOnce);
myTimer.start();

function runOnce(event:TimerEvent):void {
    trace("HELLO");
myLoader.load(new URLRequest("myxml.xml"));
myLoader.addEventListener(Event.COMPLETE, processXML);

}

function processXML(e:Event):void {
            trace("load XML");
            myXML = new XML(e.target.data);
            trace(myXML);
            }

Теперь я хочу, чтобы списки событий делали что-то, если «direction» равно Left или Right:

addEventListener(myXML.LEFT, movieMC_Left);
addEventListener(myXML.LEFT, movieMC_Right);

//movieMC_Left and movieMC_Right functions that do something.

Ответы [ 2 ]

2 голосов
/ 19 мая 2011

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

function processXML(e:Event):void {
    myXML = new XML(e.target.data);

    if (myXML.direction == "Left")
    {
       this.dispatchEvent(new XMLEvent(new XMLEvent.LEFT));
    }
    else
    {
    this.dispatchEvent(new XMLEvent(new XMLEvent.RIGHT));
    }
}

Это предполагает, что вы создали класс, который расширяет Event с именем XMLEvent (прочитайте мой пост, если у вас есть вопросы по этому поводу), и он содержит статические константы LEFT и RIGHT. Также предполагается, что класс, из которого вы отправляете события, наследуется от EventDispatcher (что он делает, если это спрайт или мувиклип).

В противном случае = ваша установка должна работать.

Что вы делаете, точно? Вождение анимации через XML? хммм. Ваша логика потенциально ошибочна в этом - если ваша загрузка занимает больше секунды (в зависимости от вашего времени), вы начнете выбрасывать ошибки.

В любом случае - ура

1 голос
/ 19 мая 2011

Типы событий - просто строки.Чтобы прослушать два разных события, вы можете сделать это:

addEventListener("XML left", onEventRightCalled);
addEventListener("XML Right, onEventLeftCalled);

Для дополнительного уровня проверки типов вы можете сделать ваши типы событий константами.

public static const XMLLEFT:String = "XML left";
public static const XMLRIGHT:String = "XML right";
addEventListener(XMLLEFT, onEventRightCalled);
addEventListener(XMLRIGHT, onEventLeftCalled);

Таким образом, в вашем XML-процессеФункция, вы будете проходить через ваш объект XML в поисках переменной направления.Когда вы найдете то, что ищете, отправьте событие:

this.dispatchEvent(new Event(XMLLEFT, true));

И еще одна вещь: убедитесь, что вы включили функции слушателя, onEventRightCalled и onEventLeftCalled.

...