2013-11-26 2 views
1

Мне нужно сделать экран загрузки. Но Flash не читает коды по строкам. Как изменить текст текстового поля перед запуском другой функции?AS3 - изменить текст перед запуском Функция

Мой код:

TextBox.text = "Processing..."; 
Process(); 

Пример:

newMap.Mytxt.textColor = 0x00FF00; 
newMap.Mytxt.text = "Processing..."; 
DefineMap(Number(newMap.newX.text),Number(newMap.newY.text));   
trace(map); 

В моем примере: программа создания карты. но я хочу показать текст «Обработка» перед созданием карты. Этот код не работает.

+0

Можете ли вы показать еще какой-нибудь код, пожалуйста? Этого недостаточно, чтобы ответить на ваш вопрос. – putvande

ответ

0

На самом деле, ваша проблема не в том, что Flash работает по строкам. Фактически, он запускается по строкам, но ваша проблема заключается в том, что вы хотите увидеть изменение текста перед запуском функции. См. Текст изменения отличается от изменения текста. Ваш код фактически меняет текст, но интерфейс еще не был изменен через eventDispatcher. Если вы работаете на SDK 3.6A или новее, вы можете прослушать событие afterChange и вызвать свою функцию после обновления экрана.

Редактировать: ваш код «не работает», потому что, поскольку выполнение вашей функции происходит так быстро, оно не дает времени на обновление для «Обработать» до того, как карта уже выполнена, что делает ее например, экран обновлялся только один раз.

Edit 2: Вот рабочий код (примечание: Вы будете видеть только проблеск «Ожидание ...» сообщение, потому что процесс слишком быстро):

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> 
    <mx:Script> 
     <![CDATA[ 
      import mx.controls.Alert; 

      // Function that starts everything 
      private function changeValue():void{ 
       // Add Listener to the label to wait the screen to be updated BEFORE updating the text. 
       this.status.addEventListener(Event.RENDER, this.changed); 
       // Update the text 
       this.status.text = "Wait..."; 
      } 

      private function changed(e:Event):void{ 
       // Make sure to remove the eventListener to not cause infinite loop. 
       this.status.removeEventListener(Event.RENDER, this.changed); 
       // Make new change. 
       this.status.text = "Done"; 
      } 
     ]]> 
    </mx:Script>  
    <mx:Button x="221" y="185" label="Change it!" click="changeValue()"/> 
    <mx:Text id="status" x="395" y="250" text="Text"/> 

</mx:Application> 
+0

Можете ли вы привести мне пример? как отслеживать сообщение перед обработкой? – eminfedar

+0

Я загружаю Flash Player Debugger (давно не работаю с AS3). Дай мне пару минут. –

+0

Спасибо за ваш ответ :) – eminfedar

0

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

+0

Я не хочу блокировать основную нить. Я хочу показать сообщение перед основным кодом. – eminfedar

+0

Это не отвечает на вопрос, что вы делаете в функции Process(). Это интенсивность процессора? Почему вам нужно показывать сообщение в первую очередь? Вы можете просто использовать setTimeout (Process, 1000); если все, что вам нужно сделать, это отложить вызов функции, чтобы показать сообщение ... – Fygo

Смежные вопросы