我有一个关于libGDX碰撞检测的问题。因为这是一个相当具体的问题,我还没有在互联网上找到任何好的解决方案。libGDX-完全碰撞检测 - 创建多边形?
因此,我已经创建了由不同身体部位组成的“人类”,每个人体都具有矩形形状的碰撞检测。
现在我想要实现的武器和技能,这对于例如是这样的:
问题
在碰撞检测的矩形工作将是玩家真正令人沮丧时,有是这样的技能:他们会成功躲避技能,但碰撞检测器仍然会损坏它们。
方法1:
之前,我开始与Libgdx工作,我已经创建了一个带有自定义引擎和类似的技能的Android游戏。在那里,我的问题解决了以下方法:
- 检测矩形碰撞
- 计算重叠矩形截面
- 检查技能的重叠部分的透明度
- 的每一个像素。如果有任何非透明像素发现 - >碰撞
这是一种沉重的方式,但由于只有重叠的像素被检查和游戏的其余部分真的很轻,它工作得很好。
此刻我的技能图像被加载为“TextureRegion”,无法访问单个像素。 我发现libGDX有一个Pixmap类,它允许进行像素检查。问题是:让它们像Pixmaps一样被加载时会更加沉重,并且会打败Texture系统的整个目的。
另一种方法是只将所有技能加载为Pixmap。你怎么看:这会是一个好方法吗?是否有可能在屏幕上绘制很多Pixmaps而没有任何问题和滞后?
方法2:
的另一个方法是先用的技能形状创建多边形并将其用于碰撞检测。
a) 但是,我将如何定义每个单一技能的多边形形状(有超过150个)?在浏览了一段时间后,我发现这个有用的工具:http://www.aurelienribon.com/blog/projects/physics-body-editor/ 它允许手动创建多边形的形状,然后将它们保存为JSON文件,libGDX应用程序可读。现在遇到困难:
- 物理主体编辑器连接到Box2d(我没有使用)。我要么必须添加整个Box2d物理引擎(我根本不需要),只是因为一个微小的碰撞检测,或者我不得不编写一个自定义的BodyEditorLoader,这将是一个艰难,复杂和耗时的任务
- 同一技能精灵的某些图像在形状上有很大差异(如第二个技能精灵示例)。在使用BodyEditor工具时,我不得不定义每种技能的形状,但是我必须定义每种技能的几张图像(最多12张)的形状。实施这些几十个多边形的时候这将是非常耗时和巨大的混乱形状
B) 如果有任何光滑的方式自动生成多边形外之象,这可能是解决方案。我可以简单地将每个精灵部分连接到生成的多边形,然后通过这种方式检查碰撞。有几个问题,但:
- 是否有任何光滑的工具,可以生成图像的多边形形状(并不需要太多的时间)?
- 我不认为像这样的工具(如果存在的话)可以直接使用纹理。它可能需要Pixmaps。不过,在Polygon创建之后,不需要保持te Pixmaps的加载。仍然是一项非常繁重的任务
我现在的想法
我被困在这一点上,因为有几种可能的方法,但他们都有自己的困难。在我选择一条路径并继续编码之前,如果您能留下一些您的想法和知识,那将是非常棒的。
libGDX中可能包含有帮助的类和代码,可以在几秒钟内解决我的问题 - 因为我真的是libGDX的新手,我对此还不甚了解。
目前我想我会采用方法1:使用像素检测。这样我就可以在我以前的Android游戏中实现准确的碰撞检测。
您认为如何?
问候 菲利克斯
您是否找到一个好的解决方案?我有同样的问题。我不知道如何从物理编辑器工具的坐标中创建多边形,并在没有box2d的情况下检查碰撞。 – trinity420