在box2d上渲染scene2d ui

时间:2014-02-25 12:00:15

标签: user-interface camera libgdx box2d scene2d

我目前在box2d playarea上呈现UI时遇到问题。截至目前,按钮呈现在屏幕的一角,但不会对点击作出反应,因为屏幕似乎认为它不在那里。只有它的图片。以下是屏幕工作原理的代码。什么顺序正在呈现。在spritebatch开始和结束之前和之后的凸轮缩放,更新和设置是一个测试,导致角落里的精灵,但它仍然没有做任何事情。我很难过,并且会很感激如何以一种好的方式处理渲染。

public synchronized void render(float delta) {
    getCamControll().update();

    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);

    // RENDER SPRITES
    batch.setProjectionMatrix(cam.combined);
    batch.begin();

    Iterator<Renderable> itr = renderables.iterator();
    while (itr.hasNext()) {
        Renderable r = itr.next();
        r.render(batch);
    }

    batch.end();

    // RENDER DEBUG
    sr.setProjectionMatrix(cam.combined);
    sr.begin(ShapeType.Line);
    for (Renderable r : renderables) {
        r.debug(sr);
    }
    sr.end();

    // RENDER GUI
    float camzoom = cam.zoom;
    Vector3 camPos = cam.position.cpy();
    cam.zoom = 1;
    cam.position.set(Vector2.Zero, cam.position.z);
    cam.update();
    batch.setProjectionMatrix(new Matrix4());
    if (stage != null) {
        batch.begin();
        stage.draw();
        Array<Actor> actors = stage.getActors();
        batch.end();
    }

    cam.zoom = camzoom;
    cam.position.set(camPos);
    cam.update();
}

1 个答案:

答案 0 :(得分:4)

您需要正确设置输入处理程序,即设置/初始化代码中的某个位置(创建阶段之后):

    Gdx.input.setInputProcessor(stage);

如果box2d(或其他任何东西)除了场景之外还需要处理输入,你应该看一下Libgdx的InputMultiplexer来组合输入处理程序。