我正在制作动态拖放游戏。 我有一个包含拖放代码的拖动项目的类。
我的问题是我无法在我的热门测试声明中调用/访问我已经放在舞台上的电影剪辑。
这是我的代码和target1_mc& target2_mc是舞台上现有的影片剪辑:
package {
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.text.TextField;
public class recipeMC extends MovieClip {
private var startX:Number;
private var startY:Number;
private var counter:Number=0;
public function recipeMC() {
this.mouseChildren = false;
this.buttonMode = true;
this.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);
this.addEventListener(MouseEvent.MOUSE_UP, dropIt);
}
private function pickUp(event:MouseEvent):void {
this.startDrag(true);
this.parent.addChild(this);
startX = this.x;
startY = this.y;
}
private function dropIt(event:MouseEvent):void {
this.stopDrag();
*****if (this.hitTestObject(target1_mc)
||this.hitTestObject(target2_mc) )***** {
this.removeEventListener(MouseEvent.MOUSE_DOWN, pickUp);
this.removeEventListener(MouseEvent.MOUSE_UP, dropIt);
this.buttonMode = false;
this.x = myTarget.x;
this.y = myTarget.y;
counter++;
} else {
//reply_txt.text = "Try Again!";
this.x = startX;
this.y = startY;
}
}
}
}
答案 0 :(得分:1)
您需要发布设置 - > flash->设置(按钮)并选择“自动声明舞台实例”。这应该可以解决问题。
修改强>
在recieptMovieClip类中尝试:
MovieClip(root).target1_mc
MovieClip(root).target2_mc
因为这对于类型来说很烦人,所以可以将MovieClip(root)存储在变量中。请注意,除非您的movieClip位于显示列表中,否则root属性不存在。所以在你的课程添加了addChild()之后,这将无效。
另一种方法是使用文档类并在静态变量中存储对主时间轴的引用。我曾写过一篇关于这篇文章的博文。 Have a look
如果您在该博文中使用该技术,您可以从以下任何地方访问主时间轴:
Main.display.target1_mc
希望有所帮助。如果需要,我可以上传一两个例子。