MovieClip完成它应该做的一切,仍然有'错误1009`

时间:2011-09-25 05:11:19

标签: actionscript-3

我正在创建一个游戏,其中给用户一张地图和五个标志。用户必须逐个拖动标志到国家/地区,因此在创建表示标志的MovieClip之后,我开始为它们创建代码。这适用于法国,但是在我将它复制到德国并使用CTRL + F(“法国”改为“德国”和“法国”改为“德国”)改变了一切后,它没有。嗯,实际上确实如此,但有一些错误。这很有趣,因为德国国旗完全应该做的一切,但输出中仍然存在错误。这是代码:

package  {
import flash.display.MovieClip;
import flash.events.MouseEvent;
public class flagGermany extends MovieClip {
    public var Name:String="Germany";
    public var atX:uint;
    public var atY:uint;
    public var wasGuessed:Boolean=false;
    public var isPressed:Boolean=false;
    public function flagGermany() {
        trace(this);
        this.addEventListener(MouseEvent.MOUSE_DOWN, dragEnable);
        this.addEventListener(MouseEvent.MOUSE_UP, dragDisable);
        stage.addEventListener(MouseEvent.MOUSE_UP, dragDisable);
    }
    function dragEnable(e:MouseEvent) {
        isPressed=true;
        trace(isPressed);
        atX=stage.mouseX-this.x;
        atY=stage.mouseY-this.y;
        this.alpha=0.3;
        this.mouseEnabled=false;
        stage.addEventListener(MouseEvent.MOUSE_MOVE, moveFlag);
    }
    function dragDisable(e:MouseEvent) {
        if(isPressed==true) {
            if(wasGuessed==false) {
                this.alpha=1;
                this.mouseEnabled=true;
            }
            trace("invoked by "+e.target);
            if(MovieClip(this.root).germany.currentFrame==2) {
                MovieClip(this.root).germany.gotoAndStop(3);
                MovieClip(this.root).germany.removeEventListener(MouseEvent.ROLL_OVER, MovieClip(this.root).hightlight);
                MovieClip(this.root).germany.removeEventListener(MouseEvent.ROLL_OUT, MovieClip(this.root).unhightlight);
                correct();
            }
            stage.removeEventListener(MouseEvent.MOUSE_MOVE, moveFlag);
            isPressed=false;
            trace(isPressed);
        }
    }
    function moveFlag(e:MouseEvent) {
        this.x=stage.mouseX-atX;
        this.y=stage.mouseY-atY;
    }
    function correct() {
        this.removeEventListener(MouseEvent.MOUSE_DOWN, dragEnable);
        this.removeEventListener(MouseEvent.MOUSE_UP, dragDisable);
        this.alpha=0;
        this.mouseEnabled=false;
        this.wasGuessed=true;
    }
}
}

这是一个错误:

TypeError: Error #1009: Cannot access a property or method of a null object reference.
at flagGermany()
at flash.display::Sprite/constructChildren()
at flash.display::Sprite()
at flash.display::MovieClip()
at EM()

EM是主文件的文档类。 flagGermany()德国国旗的构造函数。两个标志都在电影的第二帧上创建。我的代码有什么问题?!

2 个答案:

答案 0 :(得分:2)

我认为舞台为非null,MovieClip必须首先添加。我会查看为什么法国会上台而德国不会。

答案 1 :(得分:1)

在向其添加事件侦听器之前,请确保stage可用:

public function flagGermany() {
    /* .. */
    addEventListener("addedToStage", onAddedToStage);
}


private function onAddedToStage(event:*):void {
    stage.addEventListener(MouseEvent.MOUSE_UP, dragDisable);
}