libGDX mendapatkan warna piksel dari sprite atau tekstur

Saya mencarinya di internet tetapi saya tidak dapat menemukan solusi apa pun. Saya memiliki sprite atau tekstur dan ketika saya menyentuhnya saya ingin mendapatkan warna piksel dari koordinat sentuhan.

jadi saya punya:

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

Apa itu mungkin? Terima kasih :)


person miskohut    schedule 09.02.2015    source sumber
comment
Saya melihat pertanyaannya tetapi tidak ada apa pun tentang perpustakaan libgdx   -  person miskohut    schedule 09.02.2015


Jawaban (1)


Sesuatu seperti berikut ini mungkin berhasil, tetapi belum teruji. Anda bisa mendapatkan warnanya melalui Pixmap dari Texture sprite. Anda perlu memastikan bahwa Anda mengonversi koordinat masukan (layar) dengan benar ke koordinat lokal tekstur.

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));
    }
}
person noone    schedule 09.02.2015
comment
Saya tidak tahu kenapa begitu, tapi saya harus meniadakan second if karena sprite menggambar 0, 0 pojok kiri bawah tetapi inputnya 0, 0 di pojok kiri atas. - person miskohut; 10.02.2015
comment
@miskohut Libgdx menerima masukan dalam koordinat aslinya, yang kebetulan berbeda dari koordinat rendering. Untuk memperbaikinya, Anda dapat mengurangi tinggi koordinat y atau memanggil camera.unproject(Vector3 coords) - person JDSweetBeat; 06.07.2016