如何在LIBGDX中用曲线检查碰撞检测?

时间:2014-02-21 20:40:38

标签: java android libgdx collision curve

我仍然是LIBGDX的新手:(我正在尝试搜索谷歌,但我找不到教程。在我的应用程序中,我试图不使用纹理,但ShapeRenderer。 我用这段代码做了一个曲线:

        Gdx.gl10.glLineWidth(10);
        render_shape.begin(ShapeType.Line);
        render_shape.setColor(1, 1, 0, 1);
        render_shape.curve(10, 500, 30, 40, 50, 60, 300, 100, 30);
        render_shape.end();

我的曲线看起来像那样:

My curve

例如,我想在用户点击此曲线时看到Toast消息。我该怎么办?

我正在考虑从曲线中获取所有点并将其与触摸X和Y进行比较,但我不知道如何从此曲线中获取点。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

如果您想确定点击的点颜色,可以执行以下操作:

Pixmap pixmap;

    void getScreenShot(){
        Gdx.gl.glPixelStorei(GL10.GL_PACK_ALIGNMENT, 1);
        pixmap = new Pixmap(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), Pixmap.Format.RGBA8888);
        Gdx.gl.glReadPixels(0,0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, pixmap.getPixels());
    }

    /**
 * Gets the RGB values of the clicked pixel
 * 
 * @param screenX
 *            X clicked position
 * @param screenY
 *            Y clicked position
 * @return Vector3f of the RGB values.
 */
private Vector3 getRGBValues(int screenX, int screenY) {
    float newY = Gdx.graphics.getHeight() - screenY; //if using y up, you need to convert it to y up from a y down since by default all of the clicked cordinates are in a y down system
    int value = colorMap.getPixel((int) screenX, (int) newY);
    int R = ((value & 0xff000000) >>> 24);
    int G = ((value & 0x00ff0000) >>> 16);
    int B = ((value & 0x0000ff00) >>> 8);

    return new Vector3(R, G, B);
}

此代码假定相机尚未缩放且尚未移动。如果不满足这些条件中的任何一个,则必须添加一些代码以考虑相机移动和缩放。

因此,您首先必须调用getScreenShot()方法,然后使用单击的坐标作为参数调用getRGBValues。从这些RGB值中,如果它与您绘制的线相同,则您知道用户确实单击了该行。如果没有,则用户没有单击该行。我不确定这种方法的性能如何......但它应该是一种方法