【问题标题】:How to create a polygon on a texture libGDX如何在纹理 libGDX 上创建多边形
【发布时间】:2017-02-13 10:53:55
【问题描述】:

我想通过从纹理中切割透明区域来创建多边形。 我写了一个程序来检测两个对象之间的碰撞。 但是在它们发生碰撞之前检测到碰撞。 就是这个样子:http://imgur.com/a/dFmXI

这是代码:https://hastebin.com/bebusadiku.java 我想切割纹理并根据切割的纹理创建一个多边形,然后使用 Intersector 方法检测碰撞,但我不知道如何指定多边形的顶点。

我试图遵循这一点,但没有解释如何检测顶点: https://gamedev.stackexchange.com/questions/114228/how-to-detect-collision-only-in-non-transparent-texture

感谢您的帮助

【问题讨论】:

    标签: java libgdx polygon


    【解决方案1】:

    我使用this polygonal shape editor 创建更复杂的形状来检查碰撞。我相信 Box2D 可以开箱即用,但 Box2D 占用大量空间,如果您不使用实际物理,这是不必要的。但是,此工具会生成JSON 格式化的多边形坐标,并且将其反序列化回Polygon 对象并与Intersector implementation 发生冲突并不难。所以在步骤中你:

    • 使用shape editor tool 为您的图像创建形状。
    • 使用该工具将其导出为 JSON。
    • 将该数据反序列化为 LibGDX Polygon
    • 移动、缩放并将其正确附加到您的图像,使其同步。
    • 首先检查基本矩形与矩形的碰撞。
    • 如果存在基本碰撞,请使用Intersector 进行更详细的碰撞检测。

    该工具导出了大量冗余数据,如果您熟悉它导出的格式,您可以删除除多边形/顶点数据之外的所有数据。

    【讨论】:

    • 我想这样做,但我想创建一个通用类来剪切构造函数中的图像,所以我需要物理体编辑器的算法或脚本。但是脚本的问题是当我将我的游戏移植到 android 上时它不起作用。我有一个逐像素切割图像的想法,但我的实现可能非常低效并且落后于我的游戏。但我不知道 Texture 类是否具有识别像素颜色并允许对像素进行操作的方法。如果它有效,我可以尝试在纹理上找到极值点并根据这些点创建一个多边形。
    • 是的,为纹理创建一个像素图。沿着边缘做一些 Bresingham 视线技术来找到你的顶点。然后从中创建一个 delaunai 三角形,最终只有凹多边形。
    • 对不起我的英语,但布列辛汉线和德劳奈是什么意思?顺便问一下,有没有什么算法可以帮助我,或者我必须从零开始实现一切?
    • Bresenham 是一种线算法,您可以使用它来跟踪您的轮廓,这样您就不会在每个像素上都有一个顶点。 Delaunay 三角剖分可用于从顶点中取出三角形,这样您就不会得到凸多边形。
    • 我已经尝试过类似hastebin.com/ruyodevapi.java 的操作,但仍然无法正常工作,我该如何解决?当我调用 Polygon.area() 时,结果为 0。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    • 2015-06-08
    • 2017-05-24
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    相关资源
    最近更新 更多