我正在尝试创建一个带有在json文件中定义的外观的Textbutton。 我是libgdx的初学者,所以问题可能出在显示器和键盘之间;) 我希望你能帮助我。
LibGDX-version:Fresh Git-Pull(2012年11月20日)
我的json(位于“data / button.json”):
{
resources: {
com.badlogic.gdx.graphics.Color: {
white: { r: 1, g: 1, b: 1, a: 1 },
downFontColor: { r: 1, g: 0.1, b: 0.2, a: 1 }
},
com.badlogic.gdx.graphics.g2d.BitmapFont: {
default-font: { file: default.fnt }
}
},
styles: {
com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle: {
default: {
font: default-font,
downFontColor: downFontColor,
fontColor: white
}
}
}
}
失败的地方:
Skin skin = new Skin(Gdx.files.internal("data/button.json"));
例外:
Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: com.badlogic.gdx.utils.SerializationException: Error reading file: data/button.json
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:111)
Caused by: com.badlogic.gdx.utils.SerializationException: Error reading file: data/button.json
at com.badlogic.gdx.scenes.scene2d.ui.Skin.load(Skin.java:95)
at com.badlogic.gdx.scenes.scene2d.ui.Skin.<init>(Skin.java:72)
at eu.loecken.tools.virtuallampsi.screens.MenuScreen.createButton(MenuScreen.java:105)
at eu.loecken.tools.virtuallampsi.screens.MenuScreen.create(MenuScreen.java:47)
at eu.loecken.tools.virtuallampsi.screens.MenuScreen.show(MenuScreen.java:131)
at com.badlogic.gdx.Game.setScreen(Game.java:62)
at eu.loecken.tools.virtuallampsi.MainGame.create(MainGame.java:48)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:125)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:108)
Caused by: com.badlogic.gdx.utils.SerializationException: Error reading file: data/button.json
at com.badlogic.gdx.utils.Json.fromJson(Json.java:596)
at com.badlogic.gdx.scenes.scene2d.ui.Skin.load(Skin.java:93)
... 8 more
Caused by: com.badlogic.gdx.utils.SerializationException:
at com.badlogic.gdx.scenes.scene2d.ui.Skin$2.read(Skin.java:424)
at com.badlogic.gdx.scenes.scene2d.ui.Skin$2.read(Skin.java:1)
at com.badlogic.gdx.utils.Json.readValue(Json.java:762)
at com.badlogic.gdx.scenes.scene2d.ui.Skin$1.readValue(Skin.java:409)
at com.badlogic.gdx.utils.Json.fromJson(Json.java:594)
... 9 more
Caused by: java.lang.ClassNotFoundException: resources
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at com.badlogic.gdx.scenes.scene2d.ui.Skin$2.read(Skin.java:422)
... 13 more
* 没有json文件的工作代码:* (只是为了证明某些东西有效)
Texture texture = new Texture(Gdx.files.internal(imageURL));
textures.add(texture);
TextureRegion image = new TextureRegion(texture);
TextureRegion flippedImage = new TextureRegion(image);
flippedImage.flip(true, true);
ButtonStyle style = new ButtonStyle();
style.up = new TextureRegionDrawable(image);
style.down = new TextureRegionDrawable(flippedImage);
return new Button(style);
更新:此工作也正常:
private final BitmapFont defaultFont = new BitmapFont(
Gdx.files.internal("data/default.fnt"), false);
private final Texture btnTexture = new Texture(
Gdx.files.internal("buttons/lvl.png"));
private Button createButton(String text) {
// Initialize skin
// Skin skin = new Skin(Gdx.files.internal("data/button.json"));
TextureRegion image = new TextureRegion(btnTexture);
TextureRegion flippedImage = new TextureRegion(image);
flippedImage.flip(true, true);
TextButtonStyle style = new TextButtonStyle();
style.up = new TextureRegionDrawable(image);
style.down = new TextureRegionDrawable(flippedImage);
style.font = defaultFont;
return new TextButton(text, style);
}
答案 0 :(得分:4)
{
className: {
name: resource,
...
},
className: {
name: resource,
...
},
...
}
因为你可以看到你得到异常,因为它寻找“资源”类.. 所以只需将其更改为上面的模板,例如:
{
com.badlogic.gdx.graphics.Color: {
white: { r: 1, g: 1, b: 1, a: 1 },
red: { r: 1, g: 0, b: 0, a: 1 },
yellow: { r: 0.5, g: 0.5, b: 0, a: 1 },
},
com.badlogic.gdx.graphics.g2d.BitmapFont: {
medium: { file: default.fnt }
},
com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle: {
default: {
down: button, up: button,
font: medium, fontColor: white
},
green: {
down: button, up: button,
font: medium, fontColor: { r: 0, g: 1, b: 0, a: 1 }
}
}
}
P.S按钮是一个真实的图像资源 另外我非常确定你的皮肤json文件的模板适用于旧版本的libgdx