User interface 在box2d上呈现场景2D ui

User interface 在box2d上呈现场景2D ui,user-interface,camera,libgdx,box2d,scene2d,User Interface,Camera,Libgdx,Box2d,Scene2d,我目前在box2d游戏区顶部呈现UI时遇到问题。到目前为止,按钮呈现在屏幕的一角,但在点击时没有反应,因为屏幕似乎认为它不在那里。只有它的图片。下面是屏幕工作原理的代码。事物呈现的顺序。在spritebatch开始和结束之前和之后的cam缩放、更新和设置是一个测试,导致了角落中的精灵,但它仍然没有做任何事情。我非常困惑,希望能得到一些关于如何以良好方式处理渲染的建议 public synchronized void render(float delta) { getCamControll

我目前在box2d游戏区顶部呈现UI时遇到问题。到目前为止,按钮呈现在屏幕的一角,但在点击时没有反应,因为屏幕似乎认为它不在那里。只有它的图片。下面是屏幕工作原理的代码。事物呈现的顺序。在spritebatch开始和结束之前和之后的cam缩放、更新和设置是一个测试,导致了角落中的精灵,但它仍然没有做任何事情。我非常困惑,希望能得到一些关于如何以良好方式处理渲染的建议

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();
}
公共同步无效渲染(浮动增量){
getCamControll().update();
glClearColor(0,0,0,1);
Gdx.gl.glClear(GL10.gl_颜色_缓冲_位| GL10.gl_深度_缓冲_位);
//渲染精灵
batch.setProjectionMatrix(cam.combined);
batch.begin();
迭代器itr=renderables.Iterator();
while(itr.hasNext()){
Renderable r=itr.next();
r、 渲染(批处理);
}
batch.end();
//渲染调试
sr.setProjectionMatrix(凸轮组合);
sr.begin(ShapeType.Line);
用于(可渲染r:可渲染){
r、 调试(sr);
}
sr.end();
//渲染图形用户界面
浮动camzoom=cam.zoom;
Vector3 camPos=cam.position.cpy();
cam.zoom=1;
凸轮位置设定(矢量2.0,凸轮位置z);
cam.update();
batch.setProjectionMatrix(新Matrix4());
如果(阶段!=null){
batch.begin();
stage.draw();
数组actors=stage.getActors();
batch.end();
}
cam.zoom=camzoom;
凸轮位置设置(camPos);
cam.update();
}

您需要正确设置输入处理程序,即在设置/init代码中的某个地方(创建后台之后),您需要:

    Gdx.input.setInputProcessor(stage);

如果除场景外,box2d(或其他任何东西)还需要处理输入,则应查看Libgdx的InputMultiplexer,以组合输入处理程序。

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

    Gdx.input.setInputProcessor(stage);

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

box2d对输入处理甚至渲染一无所知。它是一个纯物理引擎,甚至运行在C++中,甚至没有java:好的,谢谢,我自己还没有用过Box 2D。那么我发布的代码就足够了。@noone但是如果他需要inputprocessor来移动他的
Sprite
s(我想是这样的),他需要设置一个
InputMultiplexer
@Springrbua如果他想要两个不同的处理程序进行输入,那么他将需要一个多路复用器,是的。但是Box2D并不需要一个,我很困惑。输入多路复用器在这里有什么帮助?我希望UI跟随屏幕,但box2d不这样做。因此,使用top.Box2D上的按钮呈现UI对输入处理甚至渲染一无所知。它是一个纯物理引擎,甚至运行在C++中,甚至没有java:好的,谢谢,我自己还没有用过Box 2D。那么我发布的代码就足够了。@noone但是如果他需要inputprocessor来移动他的
Sprite
s(我想是这样的),他需要设置一个
InputMultiplexer
@Springrbua如果他想要两个不同的处理程序进行输入,那么他将需要一个多路复用器,是的。但是Box2D并不需要一个,我很困惑。输入多路复用器在这里有什么帮助?我希望UI跟随屏幕,但box2d不这样做。这样就可以在顶部显示带有按钮的UI。