2013-01-07 42 views
1

我使用startDrag()拖動對象A,當它碰撞對象B函數停止拖動。 問題是,如果我將對象A過快地拖入對象B中,它會在對象B內停止拖動。 我的手比每幀檢查碰撞48次的函數更快嗎?AS3:Hittest無法及時捕獲拖動的對象

var A:MovieClip; 
addEventListener(MouseEvent.MOUSE_DOWN,dad); 
addEventListener(Event.ENTER_FRAME,update); 
function dad(e:MouseEvent) 
{ 
    A = MovieClip(e.target); 
    A.startDrag(); 
} 
function update(e:Event) 
{ 
    if (A !=null && A.hitTestObject(B)) 
    { 
     A.stopDrag(); 
    } 
} 

回答

0

嘗試使用MouseEvent.MouseMove事件而不是MouseEvent.EnterFrame。

另外,考慮一下:命中測試檢測對象是否碰撞。它沒有分開碰撞對象。如果對象在幀之間移動10個像素,則對象將測試爲碰撞,但可能會有10個像素的重疊。 使用stopDrag()將不足以分離對象。

根據重疊對象的形狀,分離它們的任務可能很簡單,也可能非常複雜。如果它們基本都是圓形的,那麼它很容易。如果它們都是凹多邊形,那麼你就會遇到數學傷害的世界。

以下是我過去用於簡單遊戲的一些分離方法。 Circle-Cirle collision and separation Circle-Line collision and Separation

(是的,你的手比:-)快)