libgdx中三角形的碰撞检测

时间:2014-05-24 13:47:32

标签: java libgdx collision-detection

我正在用libgdx做一个简单的游戏,想要添加一些简单的碰撞检测。我已经设法通过使用一个简单的矩形表达我的播放器:

  

boundingBox = new Rectangle(x + 10,y + 10,13,21);

但我的障碍似乎要复杂得多。 它们应该是尖峰,玩家可以跳跃并具有三角形形状。他们几乎看起来像这样: http://kayin.pyoko.org/iwbtg/forums/Smileys/iwbtg/spikes.gif

据我所知,libgdx中没有三角形。我已经尝试过使用多边形但是它们看起来太复杂了。

是否有一种简单的方法可以为它们实现精确的点击方框?

提前感谢您阅读我的帖子:)

编辑: 感谢大家的回复,现在一切正常,除了绘制我的多边形用于测试目的。当我打电话

  

shapeRenderer.polygon(kid.getVertices());

它只在左上角绘制我的多边形,因为它被定义为

  

boundingBox2.setVertices(new float [] {10,10,10,31,23,31,23,10}};

但是我使用

在我的kid class的更新方法中移动它
  

boundingBox2.setPosition(position.x,position.y);

有没有办法在

中使用该位置变更
  

shapeRenderer.polygon(kid.getVertices()); ?

无论如何我非常感谢你的帮助,在解决了这个问题后,我将关闭这个帖子:)

1 个答案:

答案 0 :(得分:0)

创建矩形和三角形的多边形。 如果要添加更多高级形状,甚至可以创建自定义多边形。

要从矩形转换为多边形非常容易,我几个月前制作了一种方法

public static float[] rectangleToVertices(float x, float y, float width,
        float height) {
    float[] result = new float[8];
    result[0] = x;
    result[1] = y;

    result[2] = x + width;
    result[3] = y;

    result[4] = x + width;
    result[5] = y + height;
    result[6] = x;
    result[7] = y + height;

    return result;
}

关于libGDX多边形类的好处是你可以移动多边形甚至旋转它,并获得变换后的顶点!

现在您可以使用Intersector类

public static boolean overlapConvexPolygons(Polygon p1,
                            Polygon p2)
Check whether specified convex polygons overlap.
Parameters:
p1 - The first polygon.
p2 - The second polygon.
Returns:
Whether polygons overlap.

出于测试目的,在您结束精灵批处理之后,请执行以下操作

batch.end(); // you end your spritebatch
renderer.setProjectionMatrix(camera.combined);
renderer.begin(ShapeType.Line)
renderer.polygon(polygonname.getVertices());
renderer.end();

现在您将能够看到您的多边形。