遇到一个孩子的hitTestObject问题

时间:2013-12-08 02:42:13

标签: actionscript-3 stage addchild

我刚刚开始学习动作脚本已经有一个月左右的时间了,现在我已经被困在代码的这一部分上大约2天><

所以基本上,我想在movieclip中编写一个hitTestObject(" fire_mc")来检测它是否与我在舞台上添加的孩子重叠(敌人)

所以这就是我在主舞台上所写的内容......

    var newtarget:enemy=new enemy();
stage.addChild(newtarget);
    newtarget.x=40;
    newtarget.y=30;

每次我在fire_mc中跟踪newtarget时,结果都是NULL ... 那么我应该追踪敌人还是新目标? (因为我尝试了两种,没有任何作用)。 我怎样才能在fire_mc movieclip中使用hitTest对象?

如果我要创建多个newtarget-s,我是否可以使用TestObject newtarget? 如果没有,我该怎么办?

并且有人可以告诉我root和MovieClip(root)之间的区别(因为有时在动画片段中我必须使用前者来工作,有时候使用后者,我不知道为什么我会' m都引用同一个地方)

很抱歉这些简单而冗长的问题,我真的只是一个菜鸟,我尝试在网上查找答案数小时,但没有任何帮助,请点击><

提前致谢:)

1 个答案:

答案 0 :(得分:0)

在本声明中

var newtarget:enemy=new enemy();

var - 用于定义varibles的关键字,newtarget - 存储指向新类实例的指针的变量名,:enemy - 数据类型(类名),{{1} - 用于创建新类实例的关键字,最后new是类构造函数(顺便提一下,类名称的大写方式是大写的)

请回答你的问题,当你想要检查时你应该使用哪一个是重叠的是'newtarget'。

现在关于命中测试 - 您需要做的就是检查两个对象是否相互碰撞是否正确使用了您的代码所在的项目部分的引用。 例如,如果您在IDE创建的MainTimeline上有enemy,并且fire_mc实例的创建代码存储在enemy同一位置,那么如果您检查将放在MainTimeline的框架中这两个对象都会像这样

newtarget

或者这个     newtarget.hitTestObject(fire_mc); 所有这些陈述都给出了相同的结果 - 如果对象相互交叉,则返回fire_mc.hitTestObject(newtarget);

如果您在MainTimeline上创建'newtarget'并且检查将来自true(在MainTimeline上)到框架,那么代码将会是这样的

fire_mc

现在关于this.hitTestObject(MovieClip(root).newtarget); 。它主要是root的属性,其中存储了对swf文件结构中最顶层显示对象的引用。因此,它由所有子类继承。所以这就是诀窍。当您尝试使用root在swf结构中获取对象时,差异是基于DisplayObject始终将对象返回为root的事实,这意味着如果对象包含DisplayObject应该包含的内容你不能得到它。因此,您必须将返回的引用转换为需要数据类型usign DisplayObject