我正在制作一个模拟,其中涉及动态添加到舞台上的粒子(很多圈子)。当这些圆圈碰撞时(实际上是动画片段),它们需要反弹(动量切换)。我对物理学没有任何问题,但不知道如何有效地检查碰撞。它归结为能够1)检查粒子是否在碰撞和2)在碰撞中得到哪个其他粒子(物体)?
理想情况下,我希望粒子能够检查自己的碰撞并调整自己的动量,而不仅仅是在每一帧上都运行一些多余的Render()
函数。怎么可以这样做?
提前致谢。
答案 0 :(得分:2)
对于有效的碰撞检测,您将需要使用称为二叉树的东西。基本上,您不必检查每个圆圈中每个圆圈的每个像素,而是检查每个圆圈的每个像素是否合理。这是通过重复将地图划分为四分之一来完成的。如果两个圆圈甚至不在屏幕的同一象限中,则它们不会接触。
然而,实施很困难,除非你故意给自己一个挑战,否则请使用一个库,这样你就不会重新发明轮子。您可以使用物理引擎Box2D或游戏引擎Flixel。答案 1 :(得分:0)
http://troygilbert.com/2009/08/pixel-perfect-collision-detection-revisited/
这是指向提供Pixel-Perfect Collision Detection的as3类的链接。下载网站上提供的链接。希望这会有所帮助。
作者还链接到另一个解决方案:
答案 2 :(得分:0)
如果您关心速度和优化,我建议您使用Box2D。有很多例子可供您开始使用,而您正在做的事情实际上非常简单。
答案 3 :(得分:0)
如果您不想使用Box2D,您仍然可以使用递归函数进行二进制搜索并将搜索重复分割为象限,直到您在阵列元素中发现碰撞或者您没有