我是libgdx的新手,我正在尝试在 VerticalGroup 上使用 ImageButtons 创建菜单。没有 VerticalGroup ,图像将按预期显示,但我无法滚动它们( ScrollPane 接受一个孩子)。将图像包装在 VerticalGroup 中会使图像消失。我怀疑由于坐标/单位的某些不匹配,它们被渲染到了屏幕之外的某个地方,但是我无法将手指放在上面。
下面的代码是一个最小的,可复制的示例。对于上下文,实际应用程序使用多个屏幕。第一个屏幕用作菜单,其余屏幕每个都有一个小游戏。所有屏幕(包括菜单)都扩展了基本屏幕类,该类定义了舞台和正交摄影机。我按照https://xoppa.github.io/blog/pixels/上的说明将相机配置为使用自定义单位。但是由于某种原因,我找不到如何与小部件协调的方法。
public class MyGdxGame extends Game {
@Override
public void create() {
setScreen(new MyScreen());
}
private static class MyScreen implements Screen {
private final static float VIRTUAL_HEIGHT = 4f;//world height is 4m
private OrthographicCamera cam;
private Stage stage;
public MyScreen() {
cam = new OrthographicCamera();
stage = new Stage(new ScreenViewport(cam));
Gdx.input.setInputProcessor(stage);
Texture texture = new
Texture(Gdx.files.internal("some/image.png"));
Image image = new Image(texture);
image.setPosition(0, 0);
image.setSize(1, .5f);
//this works (the image appears in the bottom left corner)
stage.addActor(image);
//if I comment the above line and enable the next one, it stops working (all I can see is the white background with no image)
//stage.addActor(wrapInVerticalGroup(image));
}
private VerticalGroup wrapInVerticalGroup(Actor actor) {
VerticalGroup verticalGroup = new VerticalGroup();
verticalGroup.addActor(actor);
return verticalGroup;
}
@Override
public void render(float delta) {
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
stage.draw();
}
@Override
public void resize(int width, int height) {
cam.setToOrtho(false, VIRTUAL_HEIGHT * width / (float) height, VIRTUAL_HEIGHT);
}
@Override
public void show() {
}
@Override
public void pause() {
}
@Override
public void resume() {
}
@Override
public void hide() {
}
@Override
public void dispose() {
stage.dispose();
}
}
}
编辑
根据@second的建议,我添加了一个对 verticalGroup.pack()的调用,并使用了更大的 VIRTUAL_HEIGHT 进行了播放,这确认了我正在渲染图像在屏幕之外。
在 pack()之前添加 verticalGroup.setScale(0.01f); ,并将 VIRTUAL_HEIGHT 保留为原始值4会产生大约与没有 VerticalGroup 的版本具有相同的结果(即,图像显示在屏幕的左下角)。
更新后的代码
private VerticalGroup wrapInVerticalGroup(Actor actor) {
VerticalGroup verticalGroup = new VerticalGroup();
verticalGroup.addActor(actor);
verticalGroup.setScale(0.01f);
verticalGroup.pack();
return verticalGroup;
}
所以问题是:如何添加垂直组并仍然保留图像的大小和位置?