LIBGDX: метод hit() не вызывается, когда класс расширяет scene2d.Stage

Вот код, который смущает меня. Я мог бы что-то упустить здесь, но не мог понять это.

public class TStage extends Stage {

    public TStage(float width, float height, boolean stretch) {
        super(width, height, stretch);
    }

    @Override
    public Actor hit(float x, float y) {
        Gdx.app.debug("HUNT", "in hit of TStage");
        return super.hit(x, y);
    }
}

public class TActor extends Actor {

    @Override
    public void draw(SpriteBatch batch, float parentAlpha) {
        // draw something here
    }

    @Override
    public Actor hit(float x, float y) {
        Gdx.app.debug("HUNT", "in hit of TActor");
        return null;
    }
}

    /* Code to set stage*/

    TStage stage = new TStage(Hunt.GAME_WIDTH, Hunt.GAME_HEIGHT, false);
    Gdx.input.setInputProcessor(stage);
    TActor actor1 = new TActor();
    stage.addActor(tactor);

когда я касаюсь экрана

выход:

in hit of TActor  

что я ожидаю:

in hit of TStage  
in hit of TActor 

[редактировать]
Я добавляю следующий код в класс TStage

@Override
    public Actor touchDown(int x, int y, int pointer, int button) {
        Gdx.app.debug("HUNT", "in touchDown of TStage");
        return super.touchDown(x, y, pointer, button);
    }

Теперь вывод:

in touchDown of TStage  
in hit of TActor 

1 ответ

Решение

Есть некоторая путаница в том, какой метод делает что.

Метод hit() возвращает актера, который находится в этих координатах. Метод, который вы хотите touchDown(), В javadocs почти нет информации, поэтому прочитайте это здесь. Вы увидите, что TActor.hit() называется, потому что это как Stage.touchDown() находит Actor это в этих координатах.

Другие вопросы по тегам