Добавление rayhandler в LibGDx вызывает проблемы в InputListener

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

public class GameScreen implements Screen {
    private RayHandler rayHandler;
    private World world;

    public GameScreen(Game game) {
        this.game = game;
        world = new World(new Vector2(0, 0), true);
        rayHandler = new RayHandler(world);
        rayHandler.setAmbientLight(0.1f, 0.1f, 0.1f, 1f);
        rayHandler.setBlurNum(3);
    }

     @Override
    public void show() {
        viewport = new FitViewport(1080, 720);
        stage = new Stage(viewport);
        rayHandler.setCombinedMatrix(stage.getCamera().combined);
        Gdx.input.setInputProcessor(stage);
    }
    @Override
    public void render(float delta) {
        //some custom rendering logic, but nothing related to rayHandler, excluding this for brevity.
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        stage.act(Gdx.graphics.getDeltaTime());
        stage.draw();
        rayHandler.updateAndRender();
    }

Теперь, когда я отладил, я понял, что onClick

работает немного ниже фактического актера

Это означает, что координаты просеиваются (я знаю, странно). Можете ли вы помочь?

1 ответ

Решение

Спасибо @Mikhail Churbanov за ваш ответ здесь. Если кто-то еще наткнется на это снова, вот решение, которое сработало.

viewport = new FitViewport(1080, 720);
rayHandler.useCustomViewport(viewport.getScreenX(),
                             viewport.getScreenY(),
                             viewport.getScreenWidth(),
                             viewport.getScreenHeight());

Объяснение box2lights doesn't auto-acquire custom viewports, and restores the 'default one' after the updateAndRender called - your need to set your custom 'fitted' viewport to rayHandler so that it would restore it correctly- using the rayHandler.useCustomViewport(...) method. Все кредиты @mikahi churbanov

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