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

Является ли это возможным? Спасибо :)


person miskohut    schedule 09.02.2015    source источник
comment
Я посмотрел на вопрос, но там ничего нет о библиотеке libgdx   -  person miskohut    schedule 09.02.2015


Ответы (1)


Что-то вроде следующего может работать, но не проверено. Вы можете получить цвет через Pixmap спрайта Texture. Вам нужно убедиться, что вы правильно конвертируете входные (экранные) координаты в локальные координаты текстуры.

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
Я не знаю, почему это так, но мне пришлось отменить второй, потому что спрайт рисует 0, 0 в левом нижнем углу, но ввод 0, 0 в левом верхнем углу. - person miskohut; 10.02.2015
comment
@miskohut Libgdx принимает исходные координаты, которые отличаются от координат рендеринга. Чтобы исправить это, вы можете либо вычесть высоту из координаты y, либо вызвать camera.unproject(Vector3 coords) - person JDSweetBeat; 06.07.2016