2

我正在尝试 Libgdx,我有一个演员,只要我们点击它就会执行一些动作。到目前为止,它工作正常。现在我想给演员添加光。在做了一些研究之后,我遇到了 Box2DLights。当我尝试将它添加到我的项目时,工作正常的 onClick Actor 似乎不起作用。我很确定这是由于 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 是

在实际演员之下工作

,这意味着以某种方式筛选坐标(我知道很奇怪)。你能帮忙吗?

4

1 回答 1

2

感谢@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的所有学分

于 2018-01-28T17:12:11.323 回答