我正在创建一个游戏,其中给用户一张地图和五个标志。用户必须逐个拖动标志到国家/地区,因此在创建表示标志的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()德国国旗的构造函数。两个标志都在电影的第二帧上创建。我的代码有什么问题?!
答案 0 :(得分:2)
我认为舞台为非null,MovieClip必须首先添加。我会查看为什么法国会上台而德国不会。
答案 1 :(得分:1)
在向其添加事件侦听器之前,请确保stage
可用:
public function flagGermany() {
/* .. */
addEventListener("addedToStage", onAddedToStage);
}
private function onAddedToStage(event:*):void {
stage.addEventListener(MouseEvent.MOUSE_UP, dragDisable);
}