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
это в этих координатах.