【问题标题】:libgdx TextButton not working with jsonlibgdx TextButton 不适用于 json
【发布时间】:2015-04-28 22:41:28
【问题描述】:

这是我的 MenuScreen.java。这是一个可以从主类设置屏幕并显示开始菜单的类。

package com.game.screens;

import com.badlogic.gdx.Game;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.TextureAtlas;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.ui.Skin;
import com.badlogic.gdx.scenes.scene2d.ui.Table;
import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
import com.badlogic.gdx.scenes.scene2d.ui.TextField;

public class MenuScreen implements Screen
{   
    private Stage stage = new Stage();
    private Table table = new Table();

    private Skin skin = new Skin(Gdx.files.internal("skin.json"),
        new TextureAtlas(Gdx.files.internal("testingStuff.pack")));

    private TextButton buttonPlay = new TextButton("Play", skin),
        buttonExit = new TextButton("Exit", skin);


    @Override
    public void show() 
    {
        table.add(buttonPlay).row();
        table.add(buttonExit).row();

        table.setFillParent(true);
        stage.addActor(table);

        Gdx.input.setInputProcessor(stage);
    }

    @Override
    public void render(float delta) 
    {
        Gdx.gl.glClearColor(0, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        stage.act();
        stage.draw();
    }

    @Override
    public void resize(int width, int height) 
    {

    }

    @Override
    public void pause() 
    {

    }

    @Override
    public void resume() 
    {

    }

    @Override
    public void hide() 
    {
        dispose();
    }

    @Override
    public void dispose() 
    {
        stage.dispose();
        skin.dispose();
    }
}

我想在我的应用程序中添加一个简单的 TextButton,但每当我运行它时,都会收到涉及 skin.json 文件的错误。

Exception in thread "LWJGL Application" com.badlogic.gdx.utils.SerializationException: Error reading file: skin.json
at com.badlogic.gdx.scenes.scene2d.ui.Skin.load(Skin.java:97)
at com.badlogic.gdx.scenes.scene2d.ui.Skin.<init>(Skin.java:82)
at com.game.screens.MenuScreen.<init>(MenuScreen.java:21)
at com.mygdx.game.MyGdxGame.create(MyGdxGame.java:22)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:143)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:120)
Caused by: com.badlogic.gdx.utils.SerializationException: Error reading       file: skin.json
at com.badlogic.gdx.utils.Json.fromJson(Json.java:683)
at com.badlogic.gdx.scenes.scene2d.ui.Skin.load(Skin.java:95)
... 5 more
Caused by: com.badlogic.gdx.utils.SerializationException: Error parsing file: skin.json
at com.badlogic.gdx.utils.JsonReader.parse(JsonReader.java:77)
at com.badlogic.gdx.utils.Json.fromJson(Json.java:681)
... 6 more
Caused by: com.badlogic.gdx.utils.SerializationException: Error parsing JSON on line 1 near: : {
"white": { "file": "skinTest.fnt" }
},
"com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle": {
"default": { "font": white }
}
at com.badlogic.gdx.utils.JsonReader.parse(JsonReader.java:547)
at com.badlogic.gdx.utils.JsonReader.parse(JsonReader.java:55)
at com.badlogic.gdx.utils.JsonReader.parse(JsonReader.java:75)
... 7 more

【问题讨论】:

    标签: java json libgdx


    【解决方案1】:

    查看https://github.com/libgdx/libgdx/blob/master/tests/gdx-tests-android/assets/data/uiskin.json上的示例皮肤

    我注意到样式类、属性和值周围没有引用。

    也许将您的文件更改为以下内容会起作用:

    {
        com.badlogic.gdx.graphics.g2d.BitmapFont: {
            white: { file: skinTest.fnt }
        },
        com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle: {
            default: { font: white }
        }
    }
    

    【讨论】:

      【解决方案2】:

      您的*.json 文件似乎有问题。它应该看起来像这样:

      {
          "com.badlogic.gdx.graphics.g2d.BitmapFont": {
              "white": { "file": "skinTest.fnt" }
          },
          "com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle": {
              "default": { "font": white }
          }
      }
      

      我的*.fnt 文件运行良好。也许您的 *.fnt 文件路径是错误的。通常使用该路径,它应该位于android/assets/skinTest.fnt。如果您在桌面上测试应用程序,您还应该将工作目录设置为 assets 文件夹。 (我使用的是 Android Studio)

      【讨论】:

        猜你喜欢
        • 2021-08-07
        • 2014-12-31
        • 2017-12-30
        • 1970-01-01
        • 1970-01-01
        • 2015-02-26
        • 1970-01-01
        • 1970-01-01
        • 2015-02-27
        相关资源
        最近更新 更多