我有在 libgdx 中工作的平铺地图,现在我正试图与这些地图发生碰撞。我认为在 Tiled 中绘制多边形并将它们用于 libgdx 中的碰撞会非常有用。实际上,我更喜欢这种方式,而不是进行每个瓷砖碰撞,因为它会给我游戏所需的碰撞灵活性。
我已经成功解析了每个对象的 xml 并抓取了多边形点。我已经能够用这些制作一个 box2d PolygonShape,它会出现在游戏中!但它是颠倒的镜像...
我认为 tiled 必须位于与 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 中,用于翻转多边形。它需要一个 Border 对象,该对象具有一个多边形字段,该字段只是一个 Vector2s 数组。_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)
}
}
}