Нужна помощь в использовании кнопки scene2d в libgdx

Я новичок в libGDX. Я пытаюсь создать пользовательскую кнопку, расширив com.badlogic.gdx.scenes.scene2d.ui.Button.

Мне нужна вся логика, связанная с кнопками, в этом классе. Но я не понимаю, как заставить работать щелчок. Я прочитал много руководств по добавлению прослушивателей событий, но ничего не работает.

public class RestartButton extends Button {

public RestartButton(ButtonStyle style) {
    super(style);

}

@Override
public void draw(SpriteBatch batch, float parentAlpha) {
    batch.draw(TextureProvider.getInstance().getRestart(), 175, 100);
}

}

И я пытаюсь добавить свою кнопку на экран (т.е. в методе показа), как это

RestartButton restartButton;
restartButton=new RestartButton(new ButtonStyle());
Stage stage;
stage.addActor(restartButton);

Я могу видеть свою кнопку на экране. Теперь я хочу добавить некоторый код, который вызывается при нажатии или касании кнопки. Может кто-нибудь помочь?


person Prashant Onkar    schedule 20.06.2014    source источник


Ответы (2)


Это не работает, потому что вам нужно установить границы для вашей кнопки. Если вы хотите нарисовать кнопку в позиции (175, 100), вы можете просто создать кнопку непосредственно из класса кнопок и вызвать

button.setBounds(x, y, width, height);

Тогда добавление слушателя будет работать, потому что теперь у вашей кнопки будет позиция и область на сцене. Если вам по-прежнему необходимо расширить класс кнопки по вашим собственным причинам, вы можете установить границы в расширенном классе напрямую или передать другой аргумент в свой класс RestartButton. Похожий на:

   public RestartButton(ButtonStyle style, Vector2 position, Vector2 size) {
       super(style);
       this.setBounds(position.x, position.y, size.x, size.y);
   }

Затем кнопка будет автоматически нарисована в нужном вам положении без необходимости переопределения метода рисования. добавить слушателя с помощью this.addListener(yourListener);

Надеюсь, поможет.

person z3n105    schedule 20.06.2014
comment
Извините, что не прокомментировал ответ @noone, но моя репутация слишком низкая, я не допущен :/ - person z3n105; 20.06.2014
comment
это именно то, что я описал в своем комментарии. Это в сочетании с прослушивателем кликов должно работать. И больше нет причин расширять Button. - person noone; 20.06.2014
comment
@PrashantOnkar Пожалуйста, отметьте его как принятый ответ, чтобы он больше не был указан как неотвеченный. - person noone; 20.06.2014

person    schedule
comment
Спасибо @noone. Но это не работает. Перезагрузить нажал! никогда не показывает. - person Prashant Onkar; 20.06.2014
comment
Gdx.input.setInputProcessor(stage); тоже добавил это - person Prashant Onkar; 20.06.2014
comment
Вы рисуете его где-то, но кнопка на самом деле где-то в другом месте. Таким образом, вы можете нажимать на картинку сколько угодно, сама кнопка ее не распознает. - person noone; 20.06.2014
comment
Я использую для этого stage.draw() .. разве этого недостаточно? - person Prashant Onkar; 20.06.2014
comment
На самом деле вы не должны расширять Button. Просто создайте своего собственного актера и установите его положение, размер и т. д. Вы можете добавить ClickListener к чему угодно. расширение Button в этом случае вам совсем не поможет. - person noone; 20.06.2014