2012-08-08 3 views
0

을에 hitTestObject를 사용하는 방법은 하나의 객체가 다른 객체를 hiting되어 있는지 확인 할 수 있지만, 내가 10 개 무비 클립 객체를 가지고 있고, 나는 어떤 객체가 어떤 객체 hiting되어 있는지 확인하려면 :은 많은 객체

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과 같은 것이 필요합니다.

+0

나는 모든 기존 객체를 검사하기 위해 for 루프를 사용할 필요가 있다고 생각 하는가? 하지만 응용 프로그램의 성능이 저하됩니까? –

답변

1

예. 필요한 모든 오브젝트에 대해 히트 테스트를 확인해야합니다. 그리고 네, 비용이 많이 드는 작업이지만 게임을 작성할 때 다른 해결 방법은 없습니다. Vector은 형식에 종속적 인 배열이며 메모리를 덜 사용하기 때문에 약간의 성능 향상을 위해 Array 대신 Vector을 사용하십시오. 구문 HERE을 확인할 수 있습니다.

당신은 다음과 같이 인스턴스화 것 :

private var arrows:Vector.<Arrow> = new Vector.<Arrow>(); 
2

을 최소 할 수 있습니다 방법 DisplayObjectContainer.getObjectsUnderPoint(point:Point)를 사용하여 하나의 점을 치는 모든 객체. 주요 오브젝트의 경계가 변경되지 않으면 모든 EnterFrame 이벤트를 테스트하는 엣지 포인트를 미리 정의 할 수 있습니다.

관련 문제