# [flash]movieClip的碰撞與重疊

- URL: https://justfly.idv.tw/flashmovieclip%e7%9a%84%e7%a2%b0%e6%92%9e%e8%88%87%e9%87%8d%e7%96%8a/
- 日期: 2009-05-25
- 分類: WEB&amp;RIA
- 標籤: actionscript, flash, hitTest, RIA

一般來說,我們要在flash中兩個movieClip是否產生了碰撞或重疊

我們會使用hitTestObject()或是hitTestPoint()

但是hitTestObject()的範圍固定在矩形,在很多狀況下並不適合

hitTestPoint()雖然可以破除矩形的限制

但只能做movieClip跟point的判斷

為了解決這個問題

有人就開發了好用的class出來分享啦！！

[as2版](http://www.gskinner.com/blog/archives/2005/10/source_code_sha.html)跟[as3版](http://www.tink.ws/blog/as-30-hittest)(我當然是用as3來測試囉！)

[直接下載as檔](https://justfly.idv.tw/wp-content/uploads/2009/05/hittest.as)

真的是讓這件事情變得無比的愉快

只要判斷：

```
if(HitTest.complexHitTestObject(hit_mc1, hit_mc2 , 5)){
		//撞到了！
	}else{
		//還沒還沒....
	}
```

就可以做你想做的事情啦

只有一點是要注意的

HitTest只能判斷movieClip類別的碰撞

也就是說如果是用addChild出來的物件必須在轉形回movieClip才能用：

```
function makeCamera():void{
		var num:Number =runNum(5);
		var c:MovieClip = new camera();
		c.gotoAndStop(num);
		c.x = runNum(190);
		c.y = runNum(27)+70;
		c.rotation = runNum(359);
		c.addEventListener(Event.ADDED_TO_STAGE,killOrNot);
		this.addChild(c);
}

function killOrNot(e:Event):void {
	if(HitTest.complexHitTestObject(MovieClip(e.target), hit_mc , 5)){
		cameraArr.push(e.target);
	}else{
		e.target.parent.removeChild(e.target)
	}
}
```
