Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Libgdx中部分sprite的重叠检测_Android_Libgdx_Collision Detection_Polygon_Overlap - Fatal编程技术网

Android Libgdx中部分sprite的重叠检测

Android Libgdx中部分sprite的重叠检测,android,libgdx,collision-detection,polygon,overlap,Android,Libgdx,Collision Detection,Polygon,Overlap,我有代表下面两个多边形的图像精灵。这些多边形松散地表示精灵区域。我想做的是使用这些多边形来检测精灵的重叠(或碰撞)。但是,重叠应在绿色正方形内有效。(这是一款拼图游戏,我试图实现的是当拼图块靠近时捕捉拼图块) 我尝试了Intersector.overlappconverxpolygons(adjacentPiece.polygon,currentPiece.polygon)但是,此项检测整个多边形的重叠 我可以在这里做一些聪明的事情来检测重叠 我认为你的方法可能过于复杂了。如果你需要你的拼图块

我有代表下面两个多边形的图像精灵。这些多边形松散地表示精灵区域。我想做的是使用这些多边形来检测精灵的重叠(或碰撞)。但是,重叠应在绿色正方形内有效。(这是一款拼图游戏,我试图实现的是当拼图块靠近时捕捉拼图块)

我尝试了
Intersector.overlappconverxpolygons(adjacentPiece.polygon,currentPiece.polygon)但是,此项检测整个多边形的重叠

我可以在这里做一些聪明的事情来检测重叠


我认为你的方法可能过于复杂了。如果你需要你的拼图块互相碰撞,你可以保留你的物理边界,但如果没有,你可以完全移除它们

无论采用哪种方法,要检测两个工件是否应该咬合,您可以在工件的四个基本边的每个边的大致中心处,用一个点来近似每个工件。若要测试碎片是否足够接近,可以咬合在一起,只需测量两个碎片侧面上的点之间的距离,然后查看它是否小于要使用的某个阈值


如果这是一个典型的益智游戏,你只需要在玩家释放一个棋子时检查它,因此如果需要一段时间来通过所有可能的比赛进行暴力循环,它不会很明显,因为当玩家拖动棋子时,它不会被完成。

如果你所有的拼图棋子都是规则大小的,你可以简单地为每个拼图棋子使用普通方块。用于定义形状的正方形将位于拼图件的实体部分和挤压件之间

根据您的图像,我已将方块应用于所示的各个部分


您可能只想使用box 2d进行碰撞。谢谢。请看新的插图。这就是你的意思吗?基于此图像,我们测量Y距离,并将其与阈值进行比较。X呢?不完全是。我的意思是每个拼图有四个点,一个在四条边的中间。整件作品的中心没有一个点。谢谢。我会试试看。顺便说一句,我创建了多边形来创建拼图块的触摸区域。你知道更好的方法吗。这里有一个问题,我不知道你的方法有多困难……如果它有效,我会让它单独运行,除非它会给你带来性能问题或花费你太多的时间来设置。一种更自动化的方法可能是在触摸屏幕时,将游戏片段绘制到帧缓冲区,但使用纯色(每个片段的唯一颜色)。这需要一个专门的着色器。您可以使用GL剪切来避免绘制超出性能需要的图形。然后检查帧缓冲区上相应触摸位置的像素颜色。谢谢,我将继续此路径。顺便说一句,你知道一种从一个完整的正方形图片创建拼图精灵的方法吗。目前,我从android方法动态创建拼图图像,并将其加载到libgdx。翻译中存在一些问题。全部问题