如何在Flash AS3中检测碰撞?

3

我想使用flash AS3创建一个迷宫,让用户引导角色。我尝试使用以下代码,但这将要求我将所有的迷宫墙壁都制作成单独的物体,并为每个物体设置碰撞检测。有没有更简单的方法来实现同样的功能?

monkey.addEventListener( Event.ENTER_FRAME, handleCollision)

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

你需要创建一个基于瓷砖的迷宫,然后对地图中的所有瓷砖进行碰撞检测。查阅基于瓷砖的碰撞检测,你会发现在迷宫中可以提高性能。 - ILikeTacos
3个回答

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/


我会点赞你的回复,因为它在我的之前给出了一个好答案(看电视是一种不好的干扰)。 - VC.One

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/


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接