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

这可能吗?谢谢:)

+0

我看了看这个问题,但没有任何关于libgdx库 – miskohut 2015-02-09 08:24:46

像下面这样的东西可能会工作,但未经测试。您可以通过精灵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 ,左上角0。 – miskohut 2015-02-10 08:18:36

+0

@miskohut Libgdx在其原生坐标中输入,这与坐标的渲染不同。要解决这个问题,您可以从y坐标中减去高度或调用'camera.unproject(Vector3 coords)' – 2016-07-06 20:15:05