2013-04-18 36 views
3

我想在用戶指導角色的時候在flash AS3中創建一個迷宮。我嘗試過使用這個(下面),但這需要我將所有的迷宮牆都製作成單獨的,併爲每一個設置碰撞檢測。有沒有更簡單的方法來完成同樣的事情?如何檢測閃存AS3中的碰撞檢測?

monkey.addEventListener(Event.ENTER_FRAME, handleCollision) 

function handleCollision(e:Event):void 
{ 
    if(monkey.hitTestObject(wall)) 
     { 
      trace("HIT"); 
     } 
     else 
     { 
      trace("MISS"); 
     } 
} 
+0

您需要創建一個基於區塊的迷宮,然後對地圖中的所有切片進行碰撞檢測。 查看基於圖塊的碰撞檢測,您會發現迷宮中的性能有所提高。 – ILikeTacos

回答

1

的一種方法,是使用hitTestPoint()方法來測試,如果任何角落都打你的牆。

hitTestPoint()只測試一個位置以查看該點是否與對象碰撞。這是你如何可以測試你的猴子的左上角,看看它是否摸牆:

// I am assuming that x,y is the top left corner of your monkey 

if (wall.hitTestPoint(monkey.x, monkey.y, true)) 
{ 
    // top left collided with wall 
{ 

所以,你可以爲所有的角落做同樣的,或者如果你願意,你可以決定任何撞擊點你想要檢查猴子。

根據您的精度水平,此方法可能適用於您的需求。但是如果你想像素的完美碰撞,你可以看看這個鏈接:

http://www.freeactionscript.com/2011/08/as3-pixel-perfect-collision-detection/

+0

我會+1你的回覆因爲它在我的電視上得到了很好的答案(電視是一個不好的分心)。 –

1

爲什麼它意味着個人的牆壁?您是否嘗試過繪製迷宮形狀/牆壁並一次全部選中它們,右鍵單擊將選擇轉換爲提供首選名稱的動畫片段。然後也給它實例名稱「牆」。現在嘗試運行它,你的handleCollision函數應該工作。

或者嘗試從hitTestObject更改爲您的碰撞檢測hitTestPoint ......

function handleCollision(e:Event):void 
{ 
if (wall.hitTestPoint (monkey.x, monkey.y, false)) 
    { trace("HIT"); } 
else 
    { trace("MISS"); } 
} 

還要檢查這篇文章更多的澄清..
http://www.actionscriptmoron.com/AS3Tutorials/hittest-hittestpoint/