libGDX从精灵或纹理获取像素颜色
问题描述:
我在网上搜索它,但我无法找到任何解决方案。我有一个精灵或纹理,当我触摸它时,我想从触摸坐标获得像素颜色。libGDX从精灵或纹理获取像素颜色
,所以我必须:
if (Gdx.input.isTouched()) {
Rectangle spriteBounds = sprite.getBoundingRectangle();
if (sprite.contains(Gdx.input.getX(), Gdx.input.getY())) {
//and here something like
//Color color = sprite.getPixelColor(Gdx.input.getX(), Gdx.input.getY());
}
}
这可能吗?谢谢:)
答
像下面这样的东西可能会工作,但未经测试。您可以通过精灵Texture
的Pixmap
获取颜色。您需要确保将输入(屏幕)坐标正确转换为纹理的局部坐标。
if (Gdx.input.isTouched()) {
Rectangle spriteBounds = sprite.getBoundingRectangle();
if (spriteBounds.contains(Gdx.input.getX(), Gdx.input.getY())) {
Texture texture = sprite.getTexture();
int spriteLocalX = (int) (Gdx.input.getX() - sprite.getX());
// we need to "invert" Y, because the screen coordinate origin is top-left
int spriteLocalY = (int) ((Gdx.graphics.getHeight() - Gdx.input.getY()) - sprite.getY());
int textureLocalX = sprite.getRegionX() + spriteLocalX;
int textureLocalY = sprite.getRegionY() + spriteLocalY;
if (!texture.getTextureData().isPrepared()) {
texture.getTextureData().prepare();
}
Pixmap pixmap = texture.getTextureData().consumePixmap();
return new Color(pixmap.getPixel(textureLocalX, textureLocalY));
}
}
+0
我不知道为什么会这样,但我不得不否定第二,如果因为精灵是绘制0,0左下角,但输入为0 ,左上角0。 – miskohut 2015-02-10 08:18:36
+0
@miskohut Libgdx在其原生坐标中输入,这与坐标的渲染不同。要解决这个问题,您可以从y坐标中减去高度或调用'camera.unproject(Vector3 coords)' – 2016-07-06 20:15:05
我看了看这个问题,但没有任何关于libgdx库 – miskohut 2015-02-09 08:24:46