2015-02-09 69 views
4

我在網上搜索它,但我無法找到任何解決方案。我有一個精靈或紋理,當我觸摸它時,我想從觸摸座標獲得像素顏色。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

回答

7

像下面這樣的東西可能會工作,但未經測試。您可以通過精靈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