我的问题有两个部分,它们是相关的。我的界面如下图所示,形状很怪异,我试图在它的边界内随机生成MovieClip,但是在寻找一种好的方法时遇到了一些麻烦。
问题1 :我可以运行If条件来检查bitMapData.hitTest,以查看MovieClip是否在该形状内随机产生,如果不是简单地使用一组新的随机重试坐标。但是,还有更好的方法吗?有一种只考虑形状内坐标的方法吗?一次将产生大量MC,因此我希望减轻负载,或者至少找到一种有效的方法进行计算。
问题2 :在此形状内生成的MovieClip最终将具有碰撞检测机制,该机制在与之交互时会自行排斥。 是否可以通过某种边界检测将它们包含在这种形状中?
如果它是一个正方形,我们可以很容易地通过快速检查所有4个边来容纳它们,但不能采用这种形状。当前,我正在考虑再次使用bitMapData.hitTest来检测被排斥后的越界,但是如何知道哪个Point()是该形状的最接近“边缘”以将MC返回?
答案 0 :(得分:1)
对于问题1 :我将假设您具有有关该形状的一些几何数据。
您可以用来检查点是否在形状内的一种方法是获取该点,然后沿一个方向从该点绘制一条线到无穷大(屏幕的边缘)。然后计算该线与形状的边缘相交的次数。如果是奇数,则该点在形状内(或在边缘),如果是偶数,则该点在形状外。
google中的第一个链接:https://www.geeksforgeeks.org/how-to-check-if-a-given-point-lies-inside-a-polygon/
或者也可以尝试一种更简单的方法(以做更多工作为代价):如果上述形状是用所有正方形和矩形生成的,并且您知道所有这些形状的点和大小:只需检查一下点与构成形状的所有正方形和矩形。
对于问题2 :如Organis所述,我将使用Box2D之类的库来执行此操作。如果您尝试单独执行此操作,则很可能会花费大量时间(您可能不想)。
答案 1 :(得分:0)