【问题标题】:Overlap detection on part of sprite in LibgdxLibgdx中部分精灵的重叠检测
【发布时间】:2018-03-07 01:25:06
【问题描述】:

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

我试过Intersector.overlapConvexPolygons(adjacentPiece.polygon, currentPiece.polygon);,但是这个检测到整个多边形的重叠。

我可以在这里做任何聪明的事情来检测重叠。

【问题讨论】:

  • 您可能只想使用 box 2d 进行碰撞。

标签: android libgdx collision-detection polygon overlap


【解决方案1】:

如果您所有的拼图都是常规尺寸,您可以简单地为每个拼图使用普通方块。用于定义形状的正方形将位于拼图块的实心部分和挤压块之间。

根据您的图片,我已将正方形应用于显示的部分。

【讨论】:

  • 谢谢,我继续走这条路。顺便说一句,您知道一种从完整的方形图片创建拼图精灵的方法吗?目前我从android方法动态创建拼图图像并将它们加载到libgdx。翻译有问题。完整问题stackoverflow.com/questions/46271718/…
【解决方案2】:

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

无论哪种方式,要检测两个部件是否应该折断,您可以通过一个大致位于每个部件四个基本边的中心的点来近似每个部件。要测试碎片是否足够接近以卡在一起,您只需要测量两块两侧的点之间的距离,看看它是否小于您要使用的某个阈值。

如果这是一款典型的益智游戏,您只需要在玩家释放一个棋子时检查这一点,因此如果需要一段时间来强制循环遍历所有潜在的匹配项,它不会真正引起注意,因为玩家拖动棋子时不会这样做。

【讨论】:

  • 谢谢。请参阅新插图。你是这个意思吗?基于此图像,我们测量 Y 距离并将其与阈值进行比较。 X 呢?
  • 不完全是。我的意思是每个拼图有四个点,在四个边的中间各一个。整块的中心没有一个点。
  • 谢谢,我会试试看。顺便说一句,我创建了多边形来为拼图创建触摸区域。你知道一个更好的方法吗?这是问题stackoverflow.com/questions/46292589/…
  • 我不知道你的方法有多难......如果它有效,我会不管它,除非它会导致你的性能问题或花费你太多时间来设置。一种更自动化的方法可能是在触摸屏幕时,将您的游戏片段绘制到 FrameBuffer 中,但使用纯色(每个片段的唯一颜色)。这将需要一个专门的着色​​器。您可以使用 GL 剪裁来避免绘制超出性能所需的内容。然后检查FrameBuffer上对应触摸位置的像素颜色。
猜你喜欢
  • 1970-01-01
  • 2017-08-07
  • 2017-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多