检测形状内的坐标

时间:2018-12-10 17:49:34

标签: actionscript-3 flash actionscript air animate-cc

我的问题有两个部分,它们是相关的。我的界面如下图所示,形状很怪异,我试图在它的边界内随机生成MovieClip,但是在寻找一种好的方法时遇到了一些麻烦。WeirdShape

问题1 :我可以运行If条件来检查bitMapData.hitTest,以查看MovieClip是否在该形状内随机产生,如果不是简单地使用一组新的随机重试坐标。但是,还有更好的方法吗?有一种只考虑形状内坐标的方法吗?一次将产生大量MC,因此我希望减轻负载,或者至少找到一种有效的方法进行计算。

问题2 :在此形状内生成的MovieClip最终将具有碰撞检测机制,该机制在与之交互时会自行排斥。 是否可以通过某种边界检测将它们包含在这种形状中?

如果它是一个正方形,我们可以很容易地通过快速检查所有4个边来容纳它们,但不能采用这种形状。当前,我正在考虑再次使用bitMapData.hitTest来检测被排斥后的越界,但是如何知道哪个Point()是该形状的最接近“边缘”以将MC返回?

2 个答案:

答案 0 :(得分:1)

对于问题1 :我将假设您具有有关该形状的一些几何数据。

您可以用来检查点是否在形状内的一种方法是获取该点,然后沿一个方向从该点绘制一条线到无穷大(屏幕的边缘)。然后计算该线与形状的边缘相交的次数。如果是奇数,则该点在形状内(或在边缘),如果是偶数,则该点在形状外。

google中的第一个链接:https://www.geeksforgeeks.org/how-to-check-if-a-given-point-lies-inside-a-polygon/

或者也可以尝试一种更简单的方法(以做更多工作为代价):如果上述形状是用所有正方形和矩形生成的,并且您知道所有这些形状的点和大小:只需检查一下点与构成形状的所有正方形和矩形。

对于问题2 :如Organis所述,我将使用Box2D之类的库来执行此操作。如果您尝试单独执行此操作,则很可能会花费大量时间(您可能不想)。

答案 1 :(得分:0)

最大的问题是代码使用多少cpu或gpu。您试图避免使用任何碰撞检测。碰撞检测正在执行代码计算以确定物体的边缘。应该是最后一个选择。

大多数时候您都不需要进行碰撞检测。您知道一切在哪里以及大小如何。一切都有中心点,比较简单的数字坐标是检查是否需要进一步检查的简便方法。

当物体彼此靠近时,您只需要在物体周围的附近区域进行碰撞检测即可。看看您的形状如何适合容易检查碰撞的盒子?该盒子应该在里面的实际锯齿状形状之前进行碰撞检查。

enter image description here

是的,必须绘制或映射碰撞检测框,但是它是在定义对象时完成的,而不是在游戏进行时完成的。如果您使用的是精灵表,请在形状周围保留方框或圆圈的xml。