我仍然是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();
我的曲线看起来像那样:
例如,我想在用户点击此曲线时看到Toast消息。我该怎么办?
我正在考虑从曲线中获取所有点并将其与触摸X和Y进行比较,但我不知道如何从此曲线中获取点。
感谢您的帮助!
答案 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值中,如果它与您绘制的线相同,则您知道用户确实单击了该行。如果没有,则用户没有单击该行。我不确定这种方法的性能如何......但它应该是一种方法