处理this.parent时的Actionscript 3错误代码1119?

时间:2012-12-10 03:52:57

标签: actionscript-3 flash parent

我是AS的新手,正在玩我发现的扫雷游戏。对于游戏板上的每个单元格,我有一个电影剪辑(cell_mc),其中嵌入了数字的动态文本框(number_txt),一个纯色方形影片剪辑(block_mc),以及一个用于标记被轰炸框的小标记(flag_mc) )。我还有一个单独的动态文本框来计算电路板上剩下多少个地雷(minecounter_txt)。

我的问题是,当我尝试运行游戏时,每次我有一个“this.parent.flag_mc”或带有任何提到的元素的“this.parent”,Flash都会返回错误代码 - “1119:通过带有静态类型单元格的引用访问可能未定义的属性flag_mc(或其他元素)。“并使用minecounter_mc返回“1119:通过静态类型flash.display的引用访问可能未定义的属性flag_mc(或其他元素):DisplayObjectContainer”

我认为因为它说它无法引用静态类型的元素,所以它无法将它们识别为动态。我搜索了一个解决方案,并读到它有助于在父级之前声明动态元素,即“MovieClip(this.parent.flag_mc),但它没有用。”

有人可以帮忙吗?感谢。

package  {

import flash.display.MovieClip;
import flash.display.DisplayObjectContainer;
import flash.events.MouseEvent;

public class cell extends MovieClip {

        public var state:Boolean;
        public var revealed:Boolean;
        public var xcor:uint;
        public var ycor:uint;
        public var marked:Boolean;
        public var cellValue:int;

        public function cell(corx:uint, cory:uint) {
            // constructor code

            this.state = false;
            this.revealed = false;
            this.marked = false;
            this.cellValue = 0;
            this.xcor = corx;
            this.ycor = cory;
            this.flag_mc.visible = false;
            this.addEventListener(MouseEvent.CLICK, cellClicked);

    }//end of constructor

    private function cellClicked(event:MouseEvent):void{
        if(event.shiftKey){

            if(this.marked){
                this.flag_mc.visible = false;
                this.marked = false;
                this.parent.minecounter_txt.text = String(int(this.parent.parent.minecounter_txt.text) + 1);
            } else{
                this.flag_mc.visible = true;
                this.marked = true;
                this.parent.minecounter_txt.text = String(int(this.parent.parent.minecounter_txt.text) - 1);
            }

        } else{

            if(!state){
                openCell();
            } else{
                if(!this.marked){
                    this.parent.play_btn.visible = true;
                }
            }

        }
    }

    private function openCell(){
        if(!this.marked && !this.revealed){
            this.block_mc.visible = false;
            this.revealed = true;
            this.removeEventListener(MouseEvent.CLICK, cellClicked);
        }
    }

}//end of class

}//end of package

1 个答案:

答案 0 :(得分:1)

除非将动画片段添加到父母的显示列表中,否则

this.parent将为空。

最好传递父母的参考资料。将它存储在类属性中。

var parentObj:Object = null;

// Constructor
public function cell(parentObj:Object, corx:uint, cory:uint) {

         this.parentObj = parentObj;

         //...

并将其命名为:

var cellObj = new cell(this, ...); 

如果你知道哪个Class是父类,那么你也可以将parentObj的类型设置为它。