Libgdx:Stage仅在(0,0)处渲染

Libgdx:Stage仅在(0,0)处渲染,libgdx,Libgdx,我正在尝试将libgdxstage用于我的GUI元素,但要使其正确呈现有很多困难。现在,我正试图在屏幕的左下角呈现一个聊天窗口 以下是GUI对象的构造: stage = new Stage(); stage.setCamera(controller.getCamera()); uiSkin = new Skin(Gdx.files.internal("res/gui/skin/uiskin.json")); Table table = new Table(uiSkin); stage.add

我正在尝试将libgdxstage用于我的GUI元素,但要使其正确呈现有很多困难。现在,我正试图在屏幕的左下角呈现一个聊天窗口

以下是GUI对象的构造:

stage = new Stage();
stage.setCamera(controller.getCamera());

uiSkin = new Skin(Gdx.files.internal("res/gui/skin/uiskin.json"));

Table table = new Table(uiSkin);
stage.addActor(table);

table.setSize(300, 260);
table.setPosition(0, 0);
table.setFillParent(false);
table.bottom();
table.left();
table.pad(10);

lblChatLabel = new Label("", uiSkin);
lblChatLabel.setWrap(true);

final ScrollPane scroll = new ScrollPane(lblChatLabel, uiSkin);

txtChatBar = new TextField("do a chat", uiSkin);
txtChatBar.setName("txtChatBar");

table.add(txtChatBar).width(300f);
table.row();
table.add(scroll).expand().fill().colspan(4);

txtChatBar.addListener(new InputListener() {
    public boolean keyDown(InputEvent event, int keycode) {
        if (keycode == Input.Keys.ENTER) {
            sendMessage();
            // Close the chat bar
            showChat = false;
            return true;
        }

        return false;
    }
});
下面是我的render()方法:

在其他代码的另一部分中,游戏的摄影机对象被转换为以玩家为中心:

camera.translate(targetPosition.x, targetPosition.y);
camera.update();
所以说,聊天窗口的渲染是正确的,但它只在0,0处进行渲染。我还更改了stage.draw(),而不是逐个迭代参与者,但这会导致相同的问题。以下是说明问题的屏幕截图:

最后,我尝试通过设置视口来手动转换舞台,但这会导致更奇怪的问题

float cx = controller.getCamera().getX();
float cy = controller.getCamera().getY();
float width = controller.getCamera().viewportWidth;
float height = controller.getCamera().viewportHeight;
stage.act();
stage.setViewport(width, height, true, cx, cy, width, height);
stage.draw();
图片如下:


当然我做错了什么,但我现在不知道。我本以为舞台是在摄像机的平移之后进行的,但事实并非如此。欢迎提出任何建议!谢谢

我认为问题在于这一行代码:

stage.setCamera(controller.getCamera());
如果我阅读正确,您希望聊天窗口始终从(0,0)渲染,而不管相机在屏幕上的什么位置。如果是这样的话,那么舞台就不应该与摄影机有任何关系,因为摄影机会四处移动,从而使舞台在正确的位置进行正确渲染变得更加复杂

如果没有那行代码,您应该可以直接调用

stage.act();
stage.draw();

而且应该很好。

谢谢你的回答。实际上,它在游戏中的坐标系始终以0,0进行渲染,我希望它随摄影机移动(上面的第一幅图像显示了当玩家移动到其他位置时以0,0进行长方体渲染)。也许这就是问题所在,因为GUI阶段需要相对于窗口而不是游戏中的坐标进行渲染。上述代码应始终在窗口坐标中以0,0呈现。
stage.act();
stage.draw();