【问题标题】:Collision detection in libgdx for triangleslibgdx 中三角形的碰撞检测
【发布时间】:2014-05-24 13:47:31
【问题描述】:

我正在使用 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 });

但是我在我的孩子类的更新方法中使用了它来移动它

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

有没有办法使用内部的位置变化

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

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

【问题讨论】:

    标签: java libgdx collision-detection


    【解决方案1】:

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

    从矩形转换为多边形很容易,几个月前我做了一个方法

    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.
    

    出于测试目的,在你结束你的 sprite 批处理后这样做

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

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

    【讨论】:

    • 您知道如何绘制多边形以进行测试吗?我试过这个:
    • 我现在也尝试在两个多边形对象上使用重叠方法:if(overlapConvexPolygons(boundingBox2, Kid.getBoundingBox2())),但它说:方法overlapConvexPolygons(Polygon, Polygon) 未定义尖峰类型。 (Spike 是我的班级名称)这很奇怪,因为我传入了两个 Polygon 对象..
    • 我已经编辑了我的答案。如果您还有更多问题,请不要忘记提问,如果我的回答对您有帮助,请不要忘记接受并投票!
    • @user3501232 overlayConvexPolygons是Intersector类的静态方法,所以必须使用Intersector.overlapConvexPolygons(...)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-10
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    相关资源
    最近更新 更多