2015-06-17 11 views
0

У меня есть всплывающее окно, в котором игрок вводит свое имя и нажимает ОК. Когда ОК нажата, я хочу, чтобы имя игрока передавалось в основной XML. Как я могу это сделать?ActionScript: как прослушивать событие из другого XML

Вот функция в главном XML, который обрабатывает всплывающее окно:

private function NewHighScore():void{ 
     highScorePopup = PopUpManager.createPopUp(this, Popup, true) as Popup; 
     highScorePopup.SetScore(playerscore); 
     PopUpManager.centerPopUp(highScorePopup); 
     playerName = highScorePopup.getName(); 
     trace(playerName); 
    } 

А вот всплывающее окно XML скрипт:

 import mx.events.CloseEvent; 
    import mx.managers.PopUpManager; 

    import spark.events.TextOperationEvent; 
    public var playerName:String; 

    public function SetScore (playerScore:int):void{ 
     scoreDisplay.text = "You achieved a new high score of " + playerScore.toString(); 
    } 

    protected function button1_clickHandler(event:MouseEvent):void{ remove(); } 

    private function remove():void{ PopUpManager.removePopUp(this);} 

    protected function titlewindow1_closeHandler(event:CloseEvent):void 
    { remove();} 

    protected function nameBox_changeHandler(event:TextOperationEvent):void 
    {playerName = nameBox.text;} 

    public function getName():String{ 
    return playerName; 
    } 

ответ

1

Ожидание игрока, чтобы ввести свое имя асинхронный процесс , поэтому вам придется ждать события, отправленного всплывающим окном. Поскольку всплывающее окно закрывается (удаляется с этапа), когда нажата кнопка «ОК», вы можете прослушивать это всплывающее окно для события Event.REMOVED_FROM_STAGE и только затем собирать данные из всплывающего окна. Не пытайтесь удалить прослушиватель событий из всплывающего окна, чтобы вы не пропустили экземпляр.

private function NewHighScore():void{ 
    highScorePopup = PopUpManager.createPopUp(this, Popup, true) as Popup; 
    highScorePopup.SetScore(playerscore); 
    PopUpManager.centerPopUp(highScorePopup); 
    highScorePopup.addEventListener(Event.REMOVED_FROM_STAGE,getPlayerName); 
} 
function getPlayerName(event:Event):void { 
    event.target.removeEventListener(Event.REMOVED_FROM_STAGE,getPlayerName); 
    var popup:Popup=event.target as Popup; 
    if (!popup) return; 
    var playerName:String=popup.getName(); // now the name will be populated 
    // do stuff with the name 
} 
+1

Спасибо, что работает, и спасибо, что объяснили это. 'e: событие «должно быть»: событие « » или « » event.target.removeEventListener (Event.REMOVED_FROM_STAGE, getPlayerName); должен быть «e.target.removeEventListener (Event.REMOVED_FROM_STAGE, getPlayerName); – Grimat