我正在尝试学习ActionScript 3作为我的第一个编程语言(在此之前,我只是在过去使用过PHP的一些小垃圾)。
我有这段代码:
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中指定),但是当我去调试这个程序时,我得到了这个错误:
col:9错误:单击未定义属性的访问。 if(clicked == true){
为什么会这样?
答案 0 :(得分: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); } });