来自点阵列的碰撞和反弹检测

时间:2011-09-18 11:41:02

标签: actionscript-3 flash collision-detection

我有一系列的点,我将用它们在游戏舞台(2D)的外部生成一个封闭的多边形栅栏。我希望在这个围栏和内部弹跳球状物体之间进行碰撞检测。

此外,我希望能够实时地任意添加/删除/重绘栅栏,并使碰撞检测仍能真实地运行。

我考虑过从点开始绘制一个Sprite / Shape并在每一帧做一个HitTest来检查是否反弹。

我的问题:这是实现这一目标的最佳/正确方法吗?考虑使用像任何角度的对角线的JezzBall这样的模拟我想要做的事情。

2 个答案:

答案 0 :(得分:0)

用四个hitTestPoints检查弹跳球的角落。如果成功,则从fence中将hitTestPoints设置为true。

可能有更好的解决方案,因为我不知道shapeflag对性能的影响,但结合角点优化,我认为它会很好,但我也有兴趣,如果有更好的方法。

答案 1 :(得分:0)

数学将成为你的朋友。快速搜索圆线或点线碰撞(这里是一个:Circle line-segment collision detection algorithm?)。

你所做的就是遍历你的点数组,创建线条。因此,第1行将是点[0]和点[1],第2行将是点[1]和点[2]。之后你会检查每一条线与你的球(如果你想要适当的碰撞,无论帧速率如何,那么你创建一个球线,这是球在球之间传播的线。最后一帧和这一个)。你的碰撞检测是针对球线和你的点造成的每条线(网上有大量的线 - 线碰撞检测算法)。你将从这样的算法中得到的结果是在当前时间步长中发生碰撞的时间,以及碰撞线的法线,它将为​​你提供反射角度。

如果您不了解矢量数学,那么学习它,它会让您的生活更轻松。同样,网络上有大量的Vector2类实现。

您可以根据需要随意删除部分墙壁,只需忽略支票中的那些点。

另一个懒惰的解决方案是使用像Box2D http://box2dflash.sourceforge.net/或Nape:http://code.google.com/p/nape/这样的物理引擎 - 它可能对你想要的游戏有点过分,但嘿,这很容易。

对于奖励积分,另一种可能对你来说更容易的技术是分离轴定理,它用于Flash游戏N:http://www.metanetsoftware.com/technique.html