默认情况下,在libgdx中使用视口的stage的表元素显示在屏幕右上角,而不是中间
我正在使用默认情况下,在libgdx中使用视口的stage的表元素显示在屏幕右上角,而不是中间,libgdx,viewport,stage,Libgdx,Viewport,Stage,我正在使用屏幕 当我在我的阶段使用表格类时,我想在屏幕的左上角显示我的表格,但默认情况下它显示在屏幕的右上角 调用tableLeft.left()会将我的表格移动到屏幕的顶部中间。使用tableft.top()将选项卡完全移出屏幕。 如果我不使用任何视口,它工作得非常好,但我会遇到其他问题 还要注意的是,我已经读了大约两个星期关于相机和视点的书,我仍然对它的工作原理感到非常困惑,即使像维基上所有的官方libgdx教程一样阅读了,并且阅读了所有关于它的东西,我可以用谷歌搜索。例如,我不知道为什么我
屏幕
当我在我的阶段使用表格
类
时,我想在屏幕的左上角显示我的表格
,但默认情况下它显示在屏幕的右上角
调用tableLeft.left()
会将我的表格移动到屏幕的顶部中间。使用tableft.top()
将选项卡完全移出屏幕。
如果我不使用任何视口,它工作得非常好,但我会遇到其他问题
还要注意的是,我已经读了大约两个星期关于相机和视点的书,我仍然对它的工作原理感到非常困惑,即使像维基上所有的官方libgdx教程一样阅读了,并且阅读了所有关于它的东西,我可以用谷歌搜索。例如,我不知道为什么我可以从resize()方法中删除所有内容,并且输出完全不变
我的代码如下所示:
@Override
public void show() {
....
camera = new OrthographicCamera(1920, 1080);
viewport = new FitViewport(1920, 1080, camera);
viewport.apply();
....
batch = new SpriteBatch();
....
stage = new Stage(viewport, batch);
Table tableLeft = new Table();
tableLeft.add(new Label("Dummy Label", skin, "default"));
stage.addActor(tableLeft);
.....
}
@Override
public void resize(int width, int height) {
viewport.update(width, height, true);
stage.getViewport().update(width, height, true);
camera.position.set(camera.viewportWidth / 2, camera.viewportHeight / 2, 0);
}
我想您不需要手动更新视口或居中摄影机:
viewport.update(width, height, true);
camera.position.set(camera.viewportWidth / 2, camera.viewportHeight / 2, 0);
因为
stage.getViewport().update(width, height, true);
在您的案例中已经这样做了:
/** Configures this viewport's screen bounds using the specified screen size and calls {@link #apply(boolean)}. Typically called
* from {@link ApplicationListener#resize(int, int)} or {@link Screen#resize(int, int)}.
* <p>
* The default implementation only calls {@link #apply(boolean)}. */
public void update (int screenWidth, int screenHeight, boolean centerCamera) {
apply(centerCamera);
}
/** Applies the viewport to the camera and sets the glViewport.
* @param centerCamera If true, the camera position is set to the center of the world. */
public void apply (boolean centerCamera) {
Gdx.gl.glViewport(screenX, screenY, screenWidth, screenHeight);
camera.viewportWidth = worldWidth;
camera.viewportHeight = worldHeight;
if (centerCamera) camera.position.set(worldWidth / 2, worldHeight / 2, 0);
camera.update();
}
/**使用指定的屏幕大小配置此视口的屏幕边界,并调用{@link#apply(boolean)}。通常称为
*来自{@link ApplicationListener#resize(int,int)}或{@link Screen#resize(int,int)}。
*
*默认实现只调用{@link#apply(boolean)}*/
公共无效更新(整数屏幕宽度、整数屏幕高度、布尔中心摄影机){
应用(中心摄像机);
}
/**将视口应用于摄影机并设置视口。
*@param centerCamera如果为真,则相机位置设置为世界中心*/
公共无效应用(布尔中心摄影机){
Gdx.gl.glViewport(screenX、screenY、screenWidth、screenHeight);
camera.viewportWidth=世界宽度;
camera.viewportHeight=世界高度;
if(中心摄像头)摄像头位置设置(worldWidth/2,worldHeight/2,0);
camera.update();
}