错误:在AS3中访问未定义的属性

时间:2014-10-12 10:32:00

标签: actionscript-3 flash

我正在尝试学习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){

为什么会这样?

1 个答案:

答案 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);
        }
        });