Java libgdx中的翻转多边形

Java libgdx中的翻转多边形,java,scala,geometry,libgdx,Java,Scala,Geometry,Libgdx,我已经在libgdx中使用了平铺贴图,现在我正在尝试使用这些贴图进行碰撞。我认为在平铺中绘制多边形并在libgdx中使用它们进行碰撞是非常有用的。事实上,我更喜欢这种方式,而不是每瓷砖碰撞,因为它会给我游戏所需的碰撞灵活性 我已经成功解析了每个对象的xml并抓取了多边形点。我已经能够用这些做一个box2d多边形形状,它在游戏中出现了!但它的镜像是颠倒的 我认为平铺必须位于与libgdx不同的坐标系上,所以我刚刚创建了一个函数,用于查找最大y点,并以正确的y翻转方式从中减去其余y点。但现在我得到了

我已经在libgdx中使用了平铺贴图,现在我正在尝试使用这些贴图进行碰撞。我认为在平铺中绘制多边形并在libgdx中使用它们进行碰撞是非常有用的。事实上,我更喜欢这种方式,而不是每瓷砖碰撞,因为它会给我游戏所需的碰撞灵活性

我已经成功解析了每个对象的xml并抓取了多边形点。我已经能够用这些做一个box2d多边形形状,它在游戏中出现了!但它的镜像是颠倒的

我认为平铺必须位于与libgdx不同的坐标系上,所以我刚刚创建了一个函数,用于查找最大y点,并以正确的y翻转方式从中减去其余y点。但现在我得到了这个错误:

java: /var/lib/hudson/jobs/libgdx-git/workspace/gdx/jni/Box2D/Collision/Shapes/b2PolygonShape.cpp:115: b2Vec2 ComputeCentroid(const b2Vec2*, int32): Assertion `area > 1.19209289550781250000e-7F' failed.
这看起来像是libgdx本机的错误有人能帮我解决这个问题吗?

这是我的tmx文件中的相关部分

<objectgroup height="20" name="Object Layer 1" width="20">
 <object x="100" y="320">
   <polygon points="0,0 244,1 300,50 300,95 -12,88 -29,19"/>
 </object>
 <object height="104" width="116" x="437" y="175"/>
</objectgroup>

下面是一段代码,它在Scala中翻转多边形。它采用一个边界对象,该对象具有一个多边形场,该多边形场只是一个矢量数组。_type字段是一个符号,它看起来与stackoverflow的语法突出显示相冲突

def flipPolygonY(border: Border){
    if(border._type == 'polygon){
        //find the highest y point
        var max = border.polygon(0).y
        for(vect <- border.polygon){
            max = max.max(vect.y)
        }
        //flip it, take max - y
        for(vect <- border.polygon){
            vect.set(vect.x, max - vect.y)
        }
    }
}
def flipolygony(边框:边框){
如果(边框.\u类型=='多边形){
//找到最高的y点
var max=边界多边形(0).y

对于(vect好的,我发现了这个问题,在做一些搜索时,我读到多边形必须按顺时针顺序定义。因此,凭直觉,我颠倒了数组或Vector2的顺序。这是可行的。因此,如果其他人想使用libgdx中平铺的多边形,请在Y轴上翻转它们,并颠倒顺序。

断言似乎要求正在添加的多边形大于0.0000001之类的值。box2d可能还要求多边形不自交(但我无法判断您的多边形是否自交)如果没有翻转,它确实可以正常工作。这个bug会让我很难受,我会一直坚持到我修复它。我可以先把多边形颠倒过来,但这并不能真正修复任何东西,这是bug的捷径,而不是修复它。--如果你想看到更多信息,请告诉我。你能试着向box2d询问“面积”吗在翻转多边形之前和翻转多边形之后,多边形的形状?(应相同且大于1…)可能在多边形进入box2d的过程中发生了其他情况?当出现错误时,您对box2d进行了什么调用?