2015-12-21 2 views
0

В моем методе create() я создал таблицу и вставил некоторые кнопки, как на рисунке ниже.Установка позиции до нажатия кнопки Libgdx

http://www2.pic-upload.de/thumb/29190899/Unbenannt.png

Каждый раз, когда пользователь нажимает на кнопку, новая перетащить в состоянии текстура должна появиться под его палец кнопки/положение.

Я попытался следующие:

sourceImage.addListener(controller); 
testbutton.get(2).addListener(new ClickListener() { 
     @Override 
     public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) { 
      sourceImage.setVisible(true); 
      sourceImage.setPosition(vec.x, vec.y); 
      return super.touchDown(event, x, y, pointer, button); 
     } 

    }); 

Это хорошо работало, но я хочу сделать так, чтобы пользователь получил текстуру на пальце и не нужно снова нажать на нее, чтобы перетащить его.

Поэтому я попытался поместить изображение на кнопку до начала касания.

Проблема в том, что я не могу получить позицию кнопки таблицы, потому что таблица будет отображаться после запуска приложения, а не в create(), если я ошибаюсь.

Это возвращение 0,0, когда я пытаюсь получить фактическое положение таблицы в моем создание()

Я нашел решение на форуме: Getting Stage coordinates of Actor in Table in libGDX

public static Vector2 getStageLocation(Actor actor) { 
    return actor.localToStageCoordinates(new Vector2(0, 0)); 
} 

и в моей визуализации()

vec = getStageLocation(testbutton.get(2)); 

Это дает мне правильную позицию кнопки в моей таблице, но я не знаю, когда и где я должен установить положение текстуры до нажатия кнопки?

ответ

0

Вы должны добавить обработчик ввода:

Gdx.input.setInputProcessor(new InputHandler()); 

то в новом классе

 @Override 
    public boolean touchDown(int screenX, int screenY, int pointer, int button) { 

     return true; 
    } 
@Override 
    public boolean touchUp(int screenX, int screenY, int pointer, int button) { 
     return false; 
    } 
@Override 
    public boolean touchDragged(int screenX, int screenY, int pointer) { 
    rendrerWhatever.drawTextures(screenX, screenY); 

     return false; 
    } 

функция touchDragged вызывается каждый раз, когда положение зажатой клик (сенсорный) изменяется, вы можете использовать его screenX и screenY, чтобы предоставить координаты для позиции, где визуализируются текстуры.

0

Вы правы в том, что вам нужно использовать метод localToStageCoordinates получить позицию стадии актера в таблице, а также, что этот метод не даст желаемых результатов до после стадии/таблица была отображаемый хотя бы один раз, когда заданы координаты элементов таблицы.

Один из возможных подходов состоит в том, чтобы отобразить экран раньше, один раз, в методе create, после того как все элементы таблицы были добавлены. Вы можете позвонить render(0) (если вы расширяете классы Game или Screen), или вызовите метод draw этапа, содержащего вашу таблицу. После этого момента localToStageCoordinates должен предоставить вам нужные значения, и вы можете продолжить выполнение своих задач create.