Actionscript 3 错误:访问AS3中未定义的属性
我正在尝试学习ActionScript3作为我的第一种编程语言(在此之前,我只在PHP上做过一些小动作) 我有以下代码:Actionscript 3 错误:访问AS3中未定义的属性,actionscript-3,flash,Actionscript 3,Flash,我正在尝试学习ActionScript3作为我的第一种编程语言(在此之前,我只在PHP上做过一些小动作) 我有以下代码: package { import flash.display.Bitmap; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.text.TextField; /**
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中,我试图获取clicked的布尔值(在第一个EventListener中指定),但当我调试此程序时,出现以下错误:
列:9错误:已单击对未定义属性的访问。
如果(单击==true){
为什么会发生这种情况?无法访问“单击”变量的原因是该变量位于不同的作用域中。在函数(第一个事件侦听器)中声明变量时,只能从该函数中访问该变量。第二个事件侦听器无法访问该变量 以下是解决此问题的一个好方法:
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);
}
});