如何在闪存AS3中检测碰撞检测?

时间:2013-04-18 17:21:19

标签: actionscript-3 collision-detection flash-cs5

我想在flash AS3中创建一个迷宫,用户指导角色。我尝试使用这个(下面),但这将要求我将所有的迷宫墙单独设置并为每个迷宫墙设置碰撞检测。是否有更简单的方法来完成同样的事情?

monkey.addEventListener( Event.ENTER_FRAME, handleCollision)

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

3 个答案:

答案 0 :(得分:1)

您可以使用碰撞检测套件:https://code.google.com/p/collisiondetectionkit/

答案 1 :(得分: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/

答案 2 :(得分:1)

为什么这意味着个别的墙?您是否尝试绘制迷宫形状/墙壁并一次选择它们,右键单击以将选择转换为提供首选名称的动画片段。然后还给它实例名称“wall”。现在尝试运行它,您的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/