【问题标题】:LibGDX Tablelayout Menu does not showLibGDX 表格布局菜单不显示
【发布时间】:2013-03-22 07:56:04
【问题描述】:

我正在 LibGDX 中编写一个处理 Backgroundtextures 的新程序,并且刚刚开始实现屏幕。但是当我测试它时,它只显示给我一个具有给定分辨率的黑色清除屏幕。 我在已实现的 Game 类中使用 setScreen(screen)- 方法调用屏幕。

代码如下:

public class MenuScreen implements Screen{
Table table;
Stage stage;
TextButton button;
TextField textField;
Texture texture;
Pic2Box2d game;

public MenuScreen(Pic2Box2d gameH)
{
    this.game = gameH;
    stage = new Stage(0, 0, true);
    table = new Table();
}
public void create()
{
    final TextFieldStyle fieldStyle = new TextFieldStyle(new BitmapFont(), Color.WHITE, new BitmapFont(), Color.GRAY, null, null, null);
    textField = new TextField("path", fieldStyle);
    final TextButtonStyle buttonStyle = new TextButtonStyle();
    buttonStyle.font = new BitmapFont();
    buttonStyle.fontColor = Color.WHITE;
    buttonStyle.pressedOffsetY = 1f;
    buttonStyle.downFontColor = new Color(0.8f, 0.8f, 0.8f, 1f);
    button = new TextButton("Übernehmen", buttonStyle); 
    button.setClickListener(new ClickListener() {
        @Override
        public void click(Actor actor, float x, float y) {
            if(textField.getText() != "" && textField.getText() != "path")
            {
            texture = new Texture(textField.getText());
            game.setScreen(new Workscreen(texture));
            }
        }
    });
    table.row();
    table.add(textField);
    table.add(button);
    stage.addActor(table);
}
@Override
public void render(float delta) {
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
    Gdx.gl.glClearColor(0, 0, 0, 1);
    stage.act(Gdx.graphics.getDeltaTime());
    stage.draw();
}

}

【问题讨论】:

    标签: java user-interface opengl-es libgdx android-tablelayout


    【解决方案1】:

    @idaNakav 关于使用 show() 和设置 Stage 尺寸是正确的。但是,这仍然会给您一个黑屏,因为您的表格没有任何大小。尝试更改您的 show() 代码以包含 table.setFillParent(true)

    它应该看起来像这样(代码基于您提供的示例)。

    @Override
    public void show() {
        final TextFieldStyle fieldStyle = new TextFieldStyle(new BitmapFont(), Color.WHITE, null, null, null);
        textField = new TextField("path", fieldStyle);
        final TextButtonStyle buttonStyle = new TextButtonStyle();
        buttonStyle.font = new BitmapFont();
        buttonStyle.fontColor = Color.WHITE;
        buttonStyle.pressedOffsetY = 1f;
        buttonStyle.downFontColor = new Color(0.8f, 0.8f, 0.8f, 1f);
        button = new TextButton("Übernehmen", buttonStyle);
        button.addListener(new ClickListener() {
            @Override
            public void clicked(InputEvent event, float x, float y) {
                if (textField.getText() != "" && textField.getText() != "path") {
                    texture = new Texture(textField.getText());
                    game.setScreen(new Workscreen(texture));
                }
            }
        });
    
    
        table.row();
        table.add(textField);
        table.add(button);
    
        // Make the table fill the stage.
        table.setFillParent(true);
    
        stage.addActor(table);
    }
    

    【讨论】:

    • 就是这样......除了在我的“游戏”类中忘记了“@Override”语句:D
    【解决方案2】:

    当屏幕变成当前屏幕时show 方法被调用(不是像你的情况那样创建),尝试将你的创建方法更改为显示

    你也是初始化阶段错误,你应该发送它的宽度和高度,你发送了 0,0 尝试类似

    stage = new Stage(Gdx.graphics.getWidth(),Gdx.graphics.getHeight(),false);
    

    【讨论】:

    • 黑屏...这不是解决方案:/
    • 它也没有用。最后一个布尔值是“拉伸”的布尔值,所以没关系,我先输入什么,它总是会拉伸到屏幕大小...
    • 现在我在 show 方法中添加了一个 System.out.print。它只被调用一次......渲染被多次调用,也许这就是错误......我尝试将create()方法更改为show()方法,将show()方法更改为render()......
    • 没关系,应该调用一次 show 并且应该经常调用 render,我说的是 Stage 构造函数的前两个参数.. 如果你确实像我告诉你的那样改变了它们仍然黑屏,尝试调试表本身调用 table.debug();和 Table.drawDebug(stage);
    猜你喜欢
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2012-09-01
    • 1970-01-01
    相关资源
    最近更新 更多