2012-07-19 4 views
0

스테이지의 무비 영역에만 추가해야한다는 제한 인 무비 클립을 스테이지에 추가해야합니다. 스테이지 자체는 복잡한 모양을 포함하거나 사용자가 조작 할 수 있습니다. 즉, 객체를 드래그/이동하여 빈 영역을 변경할 수 있습니다. hitTest 및 hitTestObject 메서드는 스테이지에서 이미 사용할 수있는 DisplayObject를 필요로합니다. 갈 수있는 올바른 방법은 무엇입니까? 내가 상상할 수있는 유일한 해결책은 무대에 물건을 추가 한 다음 반복적으로 히트 테스트를하는 것입니다.아직 스테이지에없는 객체에 대한 HitTest

[비디오 게임에서 스프라이트를 추가하는 것과 같은 것으로 상상해보십시오. 빈 영역에 스폰해야합니다. ] 만약 그들이 서로 안쪽에서 튀어 나오면 정말 이상하게 보일 것입니다.]

답변

1

글쎄, 새로운 클래스를 만들 때 변수를 끄고 가시성을 false로 설정 한 다음 거기에 도달 할 때까지 반복하십시오 hitTest가 아닙니다.

바보 예 : 두 클립의 경계 상자가 겹치는 경우

public class someClass extends Sprite 
{ 
    private var objectsOnStage:Array; 
    public function someClass(objectsArray:Array) { 
     objectsOnStage = objectsArray; 
     visible = false; 
     addEventListener(Event.ADDED_TO_STAGE, init); 
    } 
    private function init(e:Event){ 
     removeEventListener(Event.ADDED_TO_STAGE, init); 
     addEventListener(Event.ENTER_FRAME, SEARCH); 
    } 
    private function SEARCH(e:Event) { 
     var doesHit:Boolean = false; 
     x = Math.round(Math.random() * (550 - 0)) + 0; 
     y = Math.round(Math.random() * (400 - 0)) + 0; 
     for (var i:int = 0; i < objectsOnStage; i++) { 
      if (doesHit) break; 
      if (this.hitTestObject(objectsOnStage[i])) { 
       doesHit = true; 
      } 
     } 
     if (doesHit) return; 
     placedInit(); 
    } 
    private function placedInit() { 
     visible = true; 
     removeEventListener(Event.ENTER_FRAME, SEARCH); 
     //now init the stuff you want. 
    } 
} 
0

당신은 확인합니다. 이처럼 :

import flash.geom.Rectangle; 
import flash.display.MovieClip; 

// create simple movie clips that has a rectangle shape inside 
var sym1 : MovieClip = new Sym1(); 
var sym2 : MovieClip = new Sym2(); 

// get a rectanle of both clipt 
var boundingBox1 : Rectangle = sym1.getBounds(this); 
var boundingBox2 : Rectangle = sym2.getBounds(this); 

// check if bounding boxes of both movie clips overlaps 
// so it works like hitTestObject() method 
trace(boundingBox1.intersects(boundingBox2)) 
0

이 게시물 슈퍼 오래 알고 있지만, 경우에 아무도 도움이 - 당신이 무대에없는 무비 클립에 적중 테스트를 수행해야하는 경우

. 해결 방법은 먼저 비트 맵으로 래스터 화하는 것입니다.

var bitmapData:BitmapData = new BitmapData(mc.width, mc.height, true, 0x0000000); 
bitmapData.draw(mc); 

if (bitmapData.getPixel32(x, y) > 0) { 
    // Hit true. 
}