2014-10-12 4 views
0

Я пытаюсь изучить ActionScript 3 в качестве своего первого языка программирования (до этого я только что сделал в прошлом немного дерьма с PHP).Ошибка: доступ к неопределенному свойству в AS3

У меня есть этот код:

package 
{ 
    import flash.display.Bitmap; 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.events.MouseEvent; 
    import flash.text.TextField; 

    /** 
    * ... 
    * @author Mattia Del Franco 
    */ 
    [Frame(factoryClass="Preloader")] 
    public class Main extends Sprite 
    { 
     [Embed(source = "img/pgnew.png")] 
     internal var MyImage:Class; 
     // La riga embed importa l'immagine, la riga sotto la assegna ad una classe chiamata MyImage 

     public function Main():void 
     { 
      if (stage) init(); 
      else addEventListener(Event.ADDED_TO_STAGE, init); 
     } 

     private function init(e:Event = null):void 
     { 
      removeEventListener(Event.ADDED_TO_STAGE, init); 
      // entry point 

      trace ("Hello World!"); 
      var myBitmap:Bitmap = new MyImage; //nuova variabile myBitmap al quale viene assegnato la creazione di un nuovo MyImage (trattato come un oggetto) 
      addChild(myBitmap); 

      var writeText:TextField = new TextField(); 
      writeText.text = "Ciao Mondo!"; 
      this.addEventListener(MouseEvent.CLICK, function(){ 
      addChild(writeText); 
      var clicked:Boolean = true; 
      return clicked; 
      }); 

      this.addEventListener(MouseEvent.CLICK, function() { 
       if (clicked == true) { 
       removeChild(writeText); 
      } else { 
       addChild(writeText); 
      } 
      }); 

     } 

    } 
} 

Во втором EventListener я пытаюсь получить логическое значение щелкнуло (указано в первом EventListener), но когда я иду, чтобы отладить эту программу я получаю эту ошибку :

col: 9 Ошибка: доступ к неопределенному объекту щелкнул. if (clicked == true) {

Почему это происходит?

ответ

1

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

Вот хороший способ обойти проблему:

 var clicked:Boolean = false; 

     var writeText:TextField = new TextField(); 
     writeText.text = "Ciao Mondo!"; 
     this.addEventListener(MouseEvent.CLICK, function(){ 
     addChild(writeText);   
     clicked = true; 
     return clicked; 
     }); 

     this.addEventListener(MouseEvent.CLICK, function() { 
      if (clicked == true) { 
      removeChild(writeText); 
     } else { 
      addChild(writeText); 
     } 
     }); 
+0

@Mattia если мой ответ Rigth вы можете принять его –

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