Actionscript 3 在两个不同的类AS3中测试两个电影剪辑之间的冲突

Actionscript 3 在两个不同的类AS3中测试两个电影剪辑之间的冲突,actionscript-3,flash,air,Actionscript 3,Flash,Air,我需要测试两个电影剪辑之间的冲突,使用air for android动作脚本3 它是一个物体和几个障碍物之间的碰撞 我的结构如下: 基本FLA文件链接到名为baseCode.as的操作脚本文件。 在这个AS文件中,我使用以下代码创建障碍: baseCode.as: 在基本FLA文件中,我创建了将与使用Mc_Mc和Mc_MC2创建的所有障碍物碰撞的主对象。我使用以下代码创建它: 佛罗里达州 考虑到移动的Mc_Mc/Mc_MC2与我的对象来自不同的AS文件,如何测试它们之间的冲突 我是AS的新手,因

我需要测试两个电影剪辑之间的冲突,使用air for android动作脚本3

它是一个物体和几个障碍物之间的碰撞

我的结构如下:

基本FLA文件链接到名为baseCode.as的操作脚本文件。 在这个AS文件中,我使用以下代码创建障碍: baseCode.as:

在基本FLA文件中,我创建了将与使用Mc_Mc和Mc_MC2创建的所有障碍物碰撞的主对象。我使用以下代码创建它: 佛罗里达州

考虑到移动的Mc_Mc/Mc_MC2与我的对象来自不同的AS文件,如何测试它们之间的冲突


我是AS的新手,因此任何帮助都将不胜感激

如果您希望能够对来自不同类/父代的对象进行碰撞测试,那么您需要以一种可以获得对所述对象的引用的方式设置项目

从外观上看,您的两个对象实际上已经在同一个类中,因为您的主时间线代码和文档类代码共享相同的范围,所以您在其中一个中声明的内容应该在另一个中可用

您唯一缺少的是对您的障碍/Mc\u Mc的顶级引用。目前,您将其分配给作用域为makeSymbol函数的var,因此在该函数中只有对它的引用

解决方案

在您的文档类baseCode.as中,创建一个顶级var来保存对该障碍的引用:作为引用,您有一个名为t的顶级var,将此行置于该障碍之上或之下

    private var obstacle:Mc_MC;
稍后在实例化新Mc_Mc makeSymbol的函数中,将实例分配给该顶级变量:

    obstacle = new Mc_MC(1 + Math.random() *10, loc);
    addChild(obstacle);
现在,您可以访问主时间线或文档类中的任何其他位置

   if(my_obj.hitTest(obstacle)){

   }
另一方面,如果您有一个文档类,那么在主时间轴的第一个框架上放置代码是没有意义的,因为该代码在文档类中的工作方式相同,尽管它必须包含在函数中。以下是移动主时间线代码的示例:

    public class Main extends MovieClip {

        public function Main():void {
            //listen for the added to stage event prior to do anything display oriented
            this.addEventListener(Event.ADDED_TO_STAGE, init);
        }

        private function init(e:Event):void {
            //this is the best place to put the equivalent of timeline code (not including vars or functions, put those in the class root NOT nested here)
        }
    }

为什么不将时间线代码移动到baseCode.as?您的代码很难阅读。到底哪个物体应该与其他物体碰撞?代码注释和有意义的变量名对代码的清晰性有很大帮助。my_obj和Mc_Mc不是很有意义的名称,因为它们根本不表示这些对象的用途。另外,你到底想在哪里进行碰撞?我的问题是@Badfeelingabout这是主类my_obj与另一个类的Mc_Mc的碰撞。。这就是我的目标,我如何做SOI是你问题中最后一段代码,在根/主时间线上标记为Main.fla?还是在子项的时间线上?
    obstacle = new Mc_MC(1 + Math.random() *10, loc);
    addChild(obstacle);
   if(my_obj.hitTest(obstacle)){

   }
    public class Main extends MovieClip {

        public function Main():void {
            //listen for the added to stage event prior to do anything display oriented
            this.addEventListener(Event.ADDED_TO_STAGE, init);
        }

        private function init(e:Event):void {
            //this is the best place to put the equivalent of timeline code (not including vars or functions, put those in the class root NOT nested here)
        }
    }