【问题标题】:Having problems with hitTestObject-ing a childhitTestObject-ing 有问题
【发布时间】:2013-12-08 14:15:43
【问题描述】:

我刚开始学习actionscript一个月左右,我已经卡在这部分代码上大约2天了>

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

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

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

每次我在 fire_mc 中​​跟踪 newtarget 时,结果都是 NULL... 那么我应该追踪敌人还是新目标? (因为我都试过了,但没有任何效果)。 以及如何在 fire_mc 影片剪辑中点击TestObject?

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

有人能告诉我root和MovieClip(root)之间的区别吗(因为有时在movieclip中我必须使用前者来工作,有时是后者,我不知道为什么因为我就是引用同一个地方)

对不起,这些简单而冗长的问题,我真的只是一个菜鸟,我尝试在网上寻找答案几个小时,但没有任何帮助>

提前致谢:)

【问题讨论】:

    标签: actionscript-3 stage addchild


    【解决方案1】:

    在此声明中

    var newtarget:enemy=new enemy();
    

    var - 用于定义变量的关键字,newtarget - 存储指向新类实例的指针的变量名,:enemy - 数据类型(类名),new - 用于创建新类的关键字实例,最后enemy 是类构造函数(顺便说一句,类名大写的礼貌规则)

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

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

    fire_mc.hitTestObject(newtarget);
    

    或者这个 newtarget.hitTestObject(fire_mc); 所有这些语句都会给您相同的结果 - 如果对象相互交叉,您将返回 true

    如果您在 MainTimeline 上创建了“newtarget”,并且检查将来自 fire_mc(位于 MainTimeline 上)帧,那么代码将是这样的

    this.hitTestObject(MovieClip(root).newtarget);
    

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

    【讨论】:

    • 感谢@Aspiro 的详细解释,但上面的方法似乎不起作用。如果你有时间可以看看我的文件吗? drive.google.com/file/d/0B2idKBpjHWuXNEpQSGZvTFh6bEU/… 上面的fire_mc在我的文件中被命名为“fF”,是“actor_mc”添加的一个child……敌人的addChild行在第三帧,命中测试写在第二帧“火”
    • 找到了一种无需使用特定代码部分即可实现相同效果的方法....但感谢您告知我有关 Display Object、DisplayObjectContainer 和所有其他详细信息 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-09
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    相关资源
    最近更新 更多