Запутался в Inputlistener LIBGDX - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть

  • Основной тестовый класс, создающий сцену, добавляющий актера на сцену и устанавливающий процессор ввода на сцену

  • расширенныйГрупповой класс с добавлением нескольких актеров.В конструкторе группы я добавил InputListener.

InputListener не запущен.Может кто-нибудь сказать, почему нет и как это сделать?

public class Test extends ApplicationAdapter implements ApplicationListener {

    public void create() {
        stage = new Stage(new ScreenViewport());
        specialScene = new SpecialScene();
        stage.addActor(specialScene);    
    Gdx.input.setInputProcessor(stage);

    }


}


public class SpecialScene extends com.badlogic.gdx.scenes.scene2d.Group {
    public SpecialScene {
        <add some actors ...>
        addListener(specialListener);       
    }

    private static InputListener specialListener = new InputListener() {
        public boolean touchDown (InputEvent event, float x, float y, int pointer, int button)        {
            return true; //or false
        }

        @Override
        public void touchUp(InputEvent event, float x, float y, int pointer, int button) {
            super.touchUp(event, x, y, pointer, button);
        }

        @Override
        public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) {
            super.enter(event, x, y, pointer, fromActor);
        }
    };

}

* ОБНОВЛЕНИЕ *

Я нашел проблему.Слушатель не нашел ни одного региона моих актеров.Я должен явно установить регион с помощью setBounds ().

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

1 Ответ

0 голосов
/ 28 ноября 2018

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

Итакпочему в LibGDX уже нет такого класса?В LibGDX Stage используется главным образом для системы пользовательского интерфейса.Хотя он был разработан для того, чтобы быть расширяемым для всех видов целей, он включает в себя только среду, в которой вы можете это сделать, если только вы не используете полностью запеченную реализацию пользовательского интерфейса, основанную на нем.Эта реализация пользовательского интерфейса включает в себя подкласс Group под названием WidgetGroup, который делает то, что вы ожидаете, с границами.

IIRC, автор Stage написал пост в блоге несколько лет назад на libgdx.com, где обсуждает, как онпопытался использовать Stage для геймплея простой игровой джем-игры и в основном пришел к выводу, что это привело к тому, что его игра стала более запутанной или, по крайней мере, занимала больше времени при написании кода.

Я лично использовал его для пошаговой игры с джемом, и это было хорошо для этого.Я использовал систему Actions, чтобы получить приятные анимированные переходы игровых фигур.Но я думаю, что это сделало бы игру в реальном времени более замысловатой, чем создание собственной организационной структуры, адаптированной к вашей конкретной игре.Если вы создаете более сложную игру, вы можете проверить плагин Ashley для LibGDX.

В любом случае вам определенно следует использовать его для графического интерфейса, потому что все это полностью реализовано и значительно экономит время.

...