【问题标题】:libGDX get pixel color from sprite or texturelibGDX 从精灵或纹理中获取像素颜色
【发布时间】:2015-02-09 08:13:12
【问题描述】:

我在网上搜索它,但我找不到任何解决方案。我有一个精灵或纹理,当我触摸它时,我想从触摸坐标中获取像素颜色。

所以我有:

 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());
            }
        }

有可能吗?谢谢你:)

【问题讨论】:

  • 我看了这个问题,但没有关于 libgdx 库的内容

标签: android libgdx


【解决方案1】:

以下内容可能有效,但未经测试。您可以通过精灵的TexturePixmap 获取颜色。您需要确保将输入(屏幕)坐标正确转换为纹理的本地坐标。

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。
  • @miskohut Libgdx 在其原始坐标中接受输入,这恰好与渲染坐标不同。要解决此问题,您可以从 y 坐标中减去高度或调用 camera.unproject(Vector3 coords)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-24
  • 2020-09-20
  • 1970-01-01
  • 2017-06-05
相关资源
最近更新 更多