0

我可以检查一个对象是否撞到另一个对象,但是如果我有 10 个 MovieClip 对象,我想检查是否有任何对象撞到任何对象:

package  {
    import flash.display.MovieClip;
    import flashx.textLayout.events.DamageEvent;
    import fl.motion.Animator;
    import flash.geom.Point;
    import flash.utils.Timer;
    import flash.events.TimerEvent;
    import flash.events.Event;
    import flash.geom.ColorTransform;

    public class Test extends MovieClip {


    private var arrows:Array;
    private var timer:Timer;
        public function Test() {
            init();
        }

        private function init():void {

            timer = new Timer(1000, 6);
            timer.addEventListener(TimerEvent.TIMER, timerEvent);
            arrows = new Array();
            timer.start();

        }

        private function timerEvent(e:TimerEvent):void{

            var arrow:Arrow = new Arrow();
            arrow.x = 5;
            arrow.y = Math.random() * 200 + 10;
            addChild(arrow);
            arrow.addEventListener(Event.ENTER_FRAME, onEnterFrame);
            arrows.push(arrow);

            //trace(555);
        }

        private function onEnterFrame(e:Event):void{

            e.target.x += 4;

            if(e.target.x > 400)
            {
                e.target.transform.colorTransform = new ColorTransform(0, 0, 1, 1, 0, 0, 1, 1);
                e.target.removeEventListener(Event.ENTER_FRAME, onEnterFrame);
                e.target.addEventListener(Event.ENTER_FRAME, goBack);

            }

        }

        private function goBack(e:Event):void {

            e.target.x -= 4;

            if(e.target.x < 50)
            {
                e.target.transform.colorTransform = new ColorTransform(1, 1, 1, 1, 0, 0, 1, 1);
                e.target.removeEventListener(Event.ENTER_FRAME, goBack);
                e.target.addEventListener(Event.ENTER_FRAME, onEnterFrame);

            }

        }

    }

}

我如何检查是否有任何箭头接触到其他箭头对象?,不管什么对象,我需要像 hitTestGlobal 这样的东西

4

2 回答 2

2

至少您可以使用DisplayObjectContainer.getObjectsUnderPoint(point:Point)方法将所有对象击中一个点。如果您的主要对象的边界没有改变,您可以预定义边缘点,您将测试每个 EnterFrame 事件。

于 2012-08-09T13:38:36.957 回答
1

是的。您必须检查您需要的每个对象的命中测试。是的,这是一项昂贵的操作,但是在编写游戏时没有其他解决方法。尝试使用Vector而不是Arraya 以提高性能,因为Vector类型相关数组也是如此,它使用的内存更少。您可以在此处检查语法。

你会像这样实例化它:

private var arrows:Vector.<Arrow> = new Vector.<Arrow>();
于 2012-08-08T10:14:06.547 回答