2015-11-02 67 views
0

如何讓玩家在與物體接觸時停下來,但是當物體接觸物體的x側時,它仍然可以上下滑動,當物體接觸物體的y側時,它仍然可以滑動邊碰撞邊。as3 - 接觸物體時如何停止移動?

這是我的玩家運動代碼。

public function onKeyDown(event: KeyboardEvent): void 
    { 
     if (event.keyCode == Keyboard.D) 
     { 
      isRight = true; 
     } 
     if (event.keyCode == Keyboard.A) 
     { 
      isLeft = true; 
     } 
     if (event.keyCode == Keyboard.W) 
     { 
      isUp = true; 
     } 
     if (event.keyCode == Keyboard.S) 
     { 
      isDown = true; 
     } 
    } 

public function onEnterFrame(event: Event): void 
    { 
     if (isRight) 
     { 
      x += 5; 
     } 
     if (isLeft) 
     { 
      x -= 5; 
     } 
     if (isUp) 
     { 
      y -= 5; 
     } 
     if (isDown) 
     { 
      y += 5; 
     } 
    } 
+0

你有沒有試過['obj.hitTestPoint()'](http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/ 3/flash/display/DisplayObject.html#hitTestPoint())或['obj.hitTestObject()'](http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/DisplayObject .html#hitTestObject())...? – akmozo

+0

hittestobject .. – Crook

回答

0

在運動(在你的情況的onEnterFrame),您應執行以下基本步驟的每一跳:

  1. 保存玩家的X和Y到變量
  2. 計算新的位置
  3. 檢查玩家在他的新位置重疊任何物體或水平邊界。這可以通過各種方式完成;如果不知道你的關卡的結構,玩家的身材,障礙的形狀以及你如何存儲關於他們的信息,就不可能詳細說明。
  4. 對於每個重疊對象,計算多少玩家重疊對象並通過將玩家移回其跟蹤中來解決碰撞,以便他不會相互碰撞。你有前一個和下一個座標,所以,你有一個向前移動播放器的向量。

這些步驟的難度很大程度上取決於物體的形狀,碰撞物體的最大相對速度以及所需的碰撞求解精度。如果您正在處理像矩形和圓形這樣的基本元素,這些基元可能相對容易實現,但仍然會遇到諸如與多個對象碰撞的困難情況。以下是你可能想看看一些基本的工具:

檢測和解決衝突是在遊戲中最常見的問題之一發展,所以你可以很容易地找到網上的主題材料噸。例如: