libGDX обработка нажатия на объект

362
11 марта 2017, 01:52

Создаю свою кнопку по принципу прямоугольник,текстура,текст

buttons.add(new Button(new Rectangle(40,150,220,100),new TextureRegion(new Texture(Gdx.files.internal("knopka.png"))),"knopka");

Отрисовываю

for(Button b:buttons){
        game.batch.draw(b.textureRegion,b.rect.x,b.rect.y,b.rect.width,b.rect.height);
    }

После чего обработчиком нажатия отслеживаю попадание по кнопке

public boolean touchDown(int screenX, int screenY, int pointer, int button) {
    for(Button b:buttons){
        if(b.rect.contains(screenX,Gdx.graphics.getHeight()-screenY)){
            b.func();
        }
    }
    return false;
}

Обработчик срабатывает, но что-то с координатами, в режиме Desktop(компьютер) область захватывает больше, чем отрисовывается

В android вообще очень тяжело заставить кнопку сработать(она где-то в другом месте, не там, где отрисовывается)

Скорее всего дело с масштабированием в libGDX, как это исправить?

Камеру устанавливаю вот так

camera = new OrthographicCamera();
    camera.setToOrtho(false, 800, 480);

и после делаю update камеры в рендере

Answer 1

Нужно делать перевод координат касания в проекцию координат камеры. Смысл в том, что координата касания зафисит физически от размера дисплея. А рабочая область у вас всегда 800х480 (вы её задаёте вручную) Я это решаю так:

Vector3 touchPos = new Vector3();
...
if (Gdx.input.isTouched()) {  // в методе render
    touchPos.set(Gdx.input.getX(), Gdx.input.getY(), 0);
    camera.unproject(touchPos);  // это и есть преобразование координат нажатия в ваши роабочие координаты (координаты камеры)
    ...
}

Дальше уже работайте с touchPos.x и touchPos.y (touchPos.z - не используется). В вашем коде присвоение координат и преобразование нужно делать до if(b.rect.contains

READ ALSO
Spring: как правильно написать условие в контроллере?

Spring: как правильно написать условие в контроллере?

Добрый деньЕсть метод в контроллере с условием:

248
AndroidStudio убийца памяти

AndroidStudio убийца памяти

По-моему, довольно таки насущный вопросПрограммирую в Android Studio на ОС Ubuntu(16

262
mongo DB + java + jsp (Tomcat)

mongo DB + java + jsp (Tomcat)

1) В сервлете выгребаем все уникальные значения user_id:

250
Если функции Oracle возвращает package

Если функции Oracle возвращает package

Пишу приложение webJava В базе Oracle Имею доступ к нескольким пакетам (точнее к их синонимам), с процедурами и функциями

238