我有一个点数组,我将使用它们在游戏阶段(2D)的外部生成一个封闭的多边形栅栏。我希望在这个栅栏和内部跳动的球状物体之间进行碰撞检测。
此外,我希望能够实时任意添加/删除/重画栅栏,并使碰撞检测仍能实际操作。
我已经考虑过从这些点绘制一个精灵/形状,并在每一帧上做一个HitTest来检查是否反弹。
我的问题是:这是实现这个目标的最佳/正确的方法吗?考虑一下像JezzBall这样的东西,它具有任意角度的对角线,这是对我正在尝试做的事情的模拟。
发布于 2011-09-18 20:51:19
用四个hitTestPoints检查你的弹跳球的角落。如果成功,则从栅栏执行hitTestPoints,并将shapeflag设置为true。
可能会有更好的解决方案,因为我不知道shapeflag对性能的影响,但结合角点优化,我认为它会很好,但如果有更好的方法,我也很感兴趣。
发布于 2011-09-19 04:52:15
数学将是你在这里的朋友。快速搜索圆-线或点-线碰撞(这里有一个:Circle line-segment collision detection algorithm?)。
你要做的就是遍历你的点数组,创建直线。因此,行1将是points和points1,行2将是points和points2。在这之后,你检查每一条线与你的球(如果你想要正确的碰撞,无论帧速率如何,那么你创建一条球线,这是球在上一帧和这一帧之间经过的线)。根据球线和由点组成的每一条线进行碰撞检测(web上有大量的线-线碰撞检测算法)。从这样的算法中,你可以得到当前时间步长内碰撞发生的时间,以及碰撞线的法线,这将为你提供反射角度。
同样,在网上有大量Vector2类的实现。
只需忽略检查中的这些点,您就可以根据需要任意删除部分墙。
另一个懒惰的解决方案是使用像Box2D http://box2dflash.sourceforge.net/或Nape:http://code.google.com/p/nape/这样的物理引擎-它可能对你想要的游戏有点过分了,但是嘿,这很容易。
https://stackoverflow.com/questions/7461226
复制相似问题