您好,我正在开发SpaceGame Shooter游戏,当我尝试实现菜单屏幕时,出现此错误:
Process: ca.grasley.spaceshooter, PID: 27918
com.badlogic.gdx.utils.GdxRuntimeException: com.badlogic.gdx.utils.SerializationException: Error reading file: glassy-ui.json
at com.badlogic.gdx.assets.AssetManager.handleTaskError(AssetManager.java:636)
at com.badlogic.gdx.assets.AssetManager.update(AssetManager.java:411)
at com.badlogic.gdx.assets.AssetManager.finishLoading(AssetManager.java:437)
at ca.grasley.spaceshooter.MenuScreen.<init>(MenuScreen.java:28)
at ca.grasley.spaceshooter.SpaceShooterGame.create(SpaceShooterGame.java:25)
创建错误的代码是这样的:
MenuScreen.class:
public class MenuScreen implements Screen {
final SpaceShooterGame game;
/*private Texture badlogic;*/
private Skin mySkin;
private Stage stage;
public MenuScreen(final SpaceShooterGame game){
this.game = game;
game.myAssetManager.queueAddSkin();
game.myAssetManager.manager.finishLoading(); // *********THIS LINE RAISE THE ERROR******
mySkin = game.myAssetManager.manager.get(GameConstants.skin);
//badlogic = new Texture(Gdx.files.internal("badlogic.jpg"));
mySkin = new Skin(Gdx.files.internal(GameConstants.skin));
stage = new Stage(game.screenPort);
Gdx.input.setInputProcessor(stage);
Label gameTitle = new Label("GAME MENU",mySkin,"big");
gameTitle.setSize(GameConstants.col_width*2,GameConstants.row_height*2);
gameTitle.setPosition(GameConstants.centerX - gameTitle.getWidth()/2,GameConstants.centerY + GameConstants.row_height);
gameTitle.setAlignment(Align.center);
Button startBtn = new TextButton("START GAME",mySkin,"small");
startBtn.setSize(GameConstants.col_width*2,GameConstants.row_height);
startBtn.setPosition(GameConstants.centerX - startBtn.getWidth()/2,GameConstants.centerY);
startBtn.addListener(new InputListener(){
@Override
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
game.gotoGameScreen();
return true;
}
@Override
public void touchUp(InputEvent event, float x, float y, int pointer, int button) {
super.touchUp(event, x, y, pointer, button);
}
});
Button settingsBtn = new TextButton("SETTINGS",mySkin,"small");
settingsBtn.setSize(GameConstants.col_width*2,GameConstants.row_height);
settingsBtn.setPosition(GameConstants.centerX - settingsBtn.getWidth()/2,startBtn.getY() - GameConstants.row_height -15);
settingsBtn.addListener(new InputListener(){
@Override
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
game.gotoSettingsScreen();
return true;
}
@Override
public void touchUp(InputEvent event, float x, float y, int pointer, int button) {
super.touchUp(event, x, y, pointer, button);
}
});
stage.addActor(gameTitle);
stage.addActor(startBtn);
stage.addActor(settingsBtn);
}
@Override
public void show() {
}
@Override
public void render(float delta) {
Gdx.gl.glClearColor(1,0,0,0);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
stage.act();
stage.draw();
/*game.batch.begin();
game.batch.draw(badlogic,0,0);
game.batch.end();*/
}
@Override
public void resize(int width, int height) {
game.screenPort.update(width,height);
}
@Override
public void pause() {
}
@Override
public void resume() {
}
@Override
public void hide() {
}
@Override
public void dispose() {
/*badlogic.dispose();*/
/*game.batch.dispose();*/
mySkin.dispose();
stage.dispose();
}
}
SpaceShooterGame.class:
public class SpaceShooterGame extends Game {
private SpriteBatch batch;
public Viewport screenPort;
public MyAssetManager myAssetManager = new MyAssetManager();
GameScreen gameScreen;
public static Random random = new Random();
@Override
public void create() {
batch =new SpriteBatch();
OrthographicCamera camera = new OrthographicCamera();
camera.setToOrtho(false);
screenPort = new ScreenViewport();
this.setScreen(new MenuScreen(this));
}
public void gotoMenuScreen(){
MenuScreen menuScreen = new MenuScreen(this);
setScreen(menuScreen); // ***************THIS LINE RAISE THE ERROR***************************
}
public void gotoSettingsScreen(){
SettingsScreen settingsScreen = new SettingsScreen(this);
setScreen(settingsScreen);
}
public void gotoGameScreen(){
GameScreen gameScreen = new GameScreen(this);
setScreen(gameScreen);
}
@Override
public void dispose() {
gameScreen.dispose();
}
@Override
public void render() {
super.render();
}
@Override
public void resize(int width, int height) {
gameScreen.resize(width, height);
}
}
最后,我的Json文件是这样的:
//noinspection NonExistingFile
{
com.badlogic.gdx.graphics.g2d.BitmapFont: {
font: {
file: EdgeOfTheGalaxyPoster-3zRAp.otf
}
font-big: {
file: EdgeOfTheGalaxyRegular-OVEa6.otf
}
}
com.badlogic.gdx.graphics.Color: {
black: {
r: 0
g: 0
b: 0
a: 1
}
cyan: {
r: 0
g: 1
b: 0.99166656
a: 1
}
dark-cyan: {
r: 0
g: 0.39373153
b: 0.4333333
a: 1
}
white: {
r: 1
g: 1
b: 1
a: 1
}
}
com.badlogic.gdx.scenes.scene2d.ui.Skin$TintedDrawable: {
pale-blue: {
name: white
color: {
r: 0.48342222
g: 0.76367503
b: 0.99333334
a: 1
}
}
black: {
name: white
color: {
r: 0
g: 0
b: 0
a: 1
}
}
}
com.badlogic.gdx.scenes.scene2d.ui.Button$ButtonStyle: {
default: {
up: button
down: button-down
}
small: {
up: button-small
down: button-small-down
}
}
com.badlogic.gdx.scenes.scene2d.ui.CheckBox$CheckBoxStyle: {
default: {
checkboxOn: checkbox
checkboxOff: checkbox-off
font: font
fontColor: white
}
radio: {
checkboxOn: radio-button
checkboxOff: radio-button-off
font: font
fontColor: white
}
}
com.badlogic.gdx.scenes.scene2d.ui.ImageButton$ImageButtonStyle: {
default: {
up: button
down: button-down
}
}
com.badlogic.gdx.scenes.scene2d.ui.ImageTextButton$ImageTextButtonStyle: {
default: {
font: font-big
up: button
down: button-down
}
small: {
font: font
up: button
down: button-down
}
}
com.badlogic.gdx.scenes.scene2d.ui.Label$LabelStyle: {
default: {
font: font
}
big: {
font: font-big
}
black: {
font: font
fontColor: black
}
big-black: {
font: font-big
fontColor: black
}
}
com.badlogic.gdx.scenes.scene2d.ui.List$ListStyle: {
default: {
font: font
fontColorSelected: white
fontColorUnselected: dark-cyan
selection: pale-blue
background: list
}
plain: {
font: font
fontColorSelected: white
fontColorUnselected: dark-cyan
selection: pale-blue
}
}
com.badlogic.gdx.scenes.scene2d.ui.ProgressBar$ProgressBarStyle: {
default-horizontal: {
background: progress-bar
knobBefore: progress-bar-knob
}
default-vertical: {
background: progress-bar-vertical
knobBefore: progress-bar-knob-vertical
}
}
com.badlogic.gdx.scenes.scene2d.ui.ScrollPane$ScrollPaneStyle: {
default: {
hScroll: horizontal-scroll-bar
hScrollKnob: horizontal-scroll-knob
vScroll: vertical-scroll-bar
vScrollKnob: vertical-scroll-knob
}
scroll: {
background: list
hScroll: horizontal-scroll-bar
hScrollKnob: horizontal-scroll-knob
vScroll: vertical-scroll-bar
vScrollKnob: vertical-scroll-knob
}
}
com.badlogic.gdx.scenes.scene2d.ui.SelectBox$SelectBoxStyle: {
default: {
font: font
fontColor: dark-cyan
background: select-box
scrollStyle: scroll
listStyle: plain
}
}
com.badlogic.gdx.scenes.scene2d.ui.Slider$SliderStyle: {
default-horizontal: {
background: slider
knob: slider-knob
}
default-vertical: {
background: slider-vertical
knob: slider-knob
}
}
com.badlogic.gdx.scenes.scene2d.ui.SplitPane$SplitPaneStyle: {
default-horizontal: {
handle: horizontal-split-pane
}
default-vertical: {
handle: vertical-split-pane
}
}
com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle: {
default: {
font: font-big
up: button
down: button-down
}
small: {
font: font
up: button-small
down: button-small-down
}
}
com.badlogic.gdx.scenes.scene2d.ui.TextField$TextFieldStyle: {
default: {
font: font
fontColor: black
background: textfield
cursor: black
selection: pale-blue
}
}
com.badlogic.gdx.scenes.scene2d.ui.TextTooltip$TextTooltipStyle: {
default: {
label: black
background: list
}
}
com.badlogic.gdx.scenes.scene2d.ui.Tree$TreeStyle: {
default: {
plus: plus
minus: minus
selection: pale-blue
}
}
com.badlogic.gdx.scenes.scene2d.ui.Window$WindowStyle: {
default: {
background: window
titleFont: font
titleFontColor: black
}
}
}
如果您在使用LibGDx进行游戏开发方面有些过时了,并且对此有所了解,请感谢您的帮助!
答案 0 :(得分:0)
错误的Stacktrace是以下代码:
Process: ca.grasley.spaceshooter, PID: 3523
com.badlogic.gdx.utils.GdxRuntimeException: com.badlogic.gdx.utils.SerializationException: Error reading file: glassy-ui.json
at com.badlogic.gdx.assets.AssetManager.handleTaskError(AssetManager.java:636)
at com.badlogic.gdx.assets.AssetManager.update(AssetManager.java:411)
at com.badlogic.gdx.assets.AssetManager.finishLoading(AssetManager.java:437)
at ca.grasley.spaceshooter.MenuScreen.<init>(MenuScreen.java:34)
at ca.grasley.spaceshooter.SpaceShooterGame.create(SpaceShooterGame.java:25)
at com.badlogic.gdx.backends.android.AndroidGraphics.onSurfaceChanged(AndroidGraphics.java:310)
at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1555)
at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1270)
Caused by: com.badlogic.gdx.utils.SerializationException: Error reading file: glassy-ui.json
at com.badlogic.gdx.scenes.scene2d.ui.Skin.load(Skin.java:104)
at com.badlogic.gdx.assets.loaders.SkinLoader.loadSync(SkinLoader.java:75)
at com.badlogic.gdx.assets.loaders.SkinLoader.loadSync(SkinLoader.java:38)
at com.badlogic.gdx.assets.AssetLoadingTask.handleAsyncLoader(AssetLoadingTask.java:141)
at com.badlogic.gdx.assets.AssetLoadingTask.update(AssetLoadingTask.java:90)
at com.badlogic.gdx.assets.AssetManager.updateTask(AssetManager.java:561)
at com.badlogic.gdx.assets.AssetManager.update(AssetManager.java:409)
at com.badlogic.gdx.assets.AssetManager.finishLoading(AssetManager.java:437)
at ca.grasley.spaceshooter.MenuScreen.<init>(MenuScreen.java:34)
at ca.grasley.spaceshooter.SpaceShooterGame.create(SpaceShooterGame.java:25)
at com.badlogic.gdx.backends.android.AndroidGraphics.onSurfaceChanged(AndroidGraphics.java:310)
at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1555)
at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1270)
Caused by: com.badlogic.gdx.utils.SerializationException: Error reading file: glassy-ui.json
at com.badlogic.gdx.utils.Json.fromJson(Json.java:758)
at com.badlogic.gdx.scenes.scene2d.ui.Skin.load(Skin.java:102)
at com.badlogic.gdx.assets.loaders.SkinLoader.loadSync(SkinLoader.java:75)
at com.badlogic.gdx.assets.loaders.SkinLoader.loadSync(SkinLoader.java:38)
at com.badlogic.gdx.assets.AssetLoadingTask.handleAsyncLoader(AssetLoadingTask.java:141)
at com.badlogic.gdx.assets.AssetLoadingTask.update(AssetLoadingTask.java:90)
at com.badlogic.gdx.assets.AssetManager.updateTask(AssetManager.java:561)
at com.badlogic.gdx.assets.AssetManager.update(AssetManager.java:409)
at com.badlogic.gdx.assets.AssetManager.finishLoading(AssetManager.java:437)
at ca.grasley.spaceshooter.MenuScreen.<init>(MenuScreen.java:34)
at ca.grasley.spaceshooter.SpaceShooterGame.create(SpaceShooterGame.java:25)
at com.badlogic.gdx.backends.android.AndroidGraphics.onSurfaceChanged(AndroidGraphics.java:310)
at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1555)
at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1270)
Caused by: com.badlogic.gdx.utils.SerializationException: Error loading bitmap font: EdgeOfTheGalaxyPoster-3zRAp.otf
at com.badlogic.gdx.scenes.scene2d.ui.Skin$3.read(Skin.java:534)
at com.badlogic.gdx.scenes.scene2d.ui.Skin$3.read(Skin.java:499)
at com.badlogic.gdx.utils.Json.readValue(Json.java:962)
at com.badlogic.gdx.scenes.scene2d.ui.Skin$1.readValue(Skin.java:436)
at com.badlogic.gdx.utils.Json.readValue(Json.java:928)
at com.badlogic.gdx.scenes.scene2d.ui.Skin$2.readNamedObjects(Skin.java:485)
at com.badlogic.gdx.scenes.scene2d.ui.Skin$2.read(Skin.java:474)
at com.badlogic.gdx.scenes.scene2d.ui.Skin$2.read(Skin.java:468)
at com.badlogic.gdx.utils.Json.readValue(Json.java:962)
at com.badlogic.gdx.scenes.scene2d.ui.Skin$1.readValue(Skin.java:436)
at com.badlogic.gdx.utils.Json.fromJson(Json.java:756)
at com.badlogic.gdx.scenes.scene2d.ui.Skin.load(Skin.java:102)
at com.badlogic.gdx.assets.loaders.SkinLoader.loadSync(SkinLoader.java:75)
at com.badlogic.gdx.assets.loaders.SkinLoader.loadSync(SkinLoader.java:38)
at com.badlogic.gdx.assets.AssetLoadingTask.handleAsyncLoader(AssetLoadingTask.java:141)
at com.badlogic.gdx.assets.AssetLoadingTask.update(AssetLoadingTask.java:90)
at com.badlogic.gdx.assets.AssetManager.updateTask(AssetManager.java:561)
at com.badlogic.gdx.assets.AssetManager.update(AssetManager.java:409)
at com.badlogic.gdx.assets.AssetManager.finishLoading(AssetManager.java:437)
at ca.grasley.spaceshooter.MenuScreen.<init>(MenuScreen.java:34)
at ca.grasley.spaceshooter.SpaceShooterGame.create(SpaceShooterGame.java:25)
at com.badlogic.gdx.backends.android.AndroidGraphics.onSurfaceChanged(AndroidGraphics.java:310)
at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1555)
at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1270)
Caused by: com.badlogic.gdx.utils.GdxRuntimeException: Error loading font file: EdgeOfTheGalaxyPoster-3zRAp.otf
at com.badlogic.gdx.graphics.g2d.BitmapFont$BitmapFontData.load(BitmapFont.java:717)
at com.badlogic.gdx.graphics.g2d.BitmapFont$BitmapFontData.<init>(BitmapFont.java:485)
at com.badlogic.gdx.graphics.g2d.BitmapFont.<init>(BitmapFont.java:116)
at com.badlogic.gdx.scenes.scene2d.ui.Skin$3.read(Skin.java:526)
at com.badlogic.gdx.scenes.scene2d.ui.Skin$3.read(Skin.java:499)
at com.badlogic.gdx.utils.Json.readValue(Json.java:962)
at com.badlogic.gdx.scenes.scene2d.ui.Skin$1.readValue(Skin.java:436)
at com.badlogic.gdx.utils.Json.readValue(Json.java:928)
at com.badlogic.gdx.scenes.scene2d.ui.Skin$2.readNamedObjects(Skin.java:485)
at com.badlogic.gdx.scenes.scene2d.ui.Skin$2.read(Skin.java:474)
at com.badlogic.gdx.scenes.scene2d.ui.Skin$2.read(Skin.java:468)
at com.badlogic.gdx.utils.Json.readValue(Json.java:962)
at com.badlogic.gdx.scenes.scene2d.ui.Skin$1.readValue(Skin.java:436)
at com.badlogic.gdx.utils.Json.fromJson(Json.java:756)
at com.badlogic.gdx.scenes.scene2d.ui.Skin.load(Skin.java:102)
at com.badlogic.gdx.assets.loaders.SkinLoader.loadSync(SkinLoader.java:75)
at com.badlogic.gdx.assets.loaders.SkinLoader.loadSync(SkinLoader.java:38)
at com.badlogic.gdx.assets.AssetLoadingTask.handleAsyncLoader(AssetLoadingTask.java:141)
at com.badlogic.gdx.assets.AssetLoadingTask.update(AssetLoadingTask.java:90)
at com.badlogic.gdx.assets.AssetManager.updateTask(AssetManager.java:561)
at com.badlogic.gdx.assets.AssetManager.update(AssetManager.java:409)
at com.badlogic.gdx.assets.AssetManager.finishLoading(AssetManager.java:437)
at ca.grasley.spaceshooter.MenuScreen.<init>(MenuScreen.java:34)
at ca.grasley.spaceshooter.SpaceShooterGame.create(SpaceShooterGame.java:25)
at com.badlogic.gdx.backends.android.AndroidGraphics.onSurfaceChanged(AndroidGraphics.java:310)
at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1555)
at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1270)
Caused by: com.badlogic.gdx.utils.GdxRuntimeException: Invalid padding.
at com.badlogic.gdx.graphics.g2d.BitmapFont$BitmapFontData.load(BitmapFont.java:500)
at com.badlogic.gdx.graphics.g2d.BitmapFont$BitmapFontData.<init>(BitmapFont.java:485)
at com.badlogic.gdx.graphics.g2d.BitmapFont.<init>(BitmapFont.java:116)
at com.badlogic.gdx.scenes.scene2d.ui.Skin$3.read(Skin.java:526)
at com.badlogic.gdx.scenes.scene2d.ui.Skin$3.read(Skin.java:499)
at com.badlogic.gdx.utils.Json.readValue(Json.java:962)
at com.badlogic.gdx.scenes.scene2d.ui.Skin$1.readValue(Skin.java:436)
at com.badlogic.gdx.utils.Json.readValue(Json.java:928)
at com.badlogic.gdx.scenes.scene2d.ui.Skin$2.readNamedObjects(Skin.java:485)
at com.badlogic.gdx.scenes.scene2d.ui.Skin$2.read(Skin.java:474)
at com.badlogic.gdx.scenes.scene2d.ui.Skin$2.read(Skin.java:468)
at com.badlogic.gdx.utils.Json.readValue(Json.java:962)
at com.badlogic.gdx.scenes.scene2d.ui.Skin$1.readValue(Skin.java:436)
at com.badlogic.gdx.utils.Json.fromJson(Json.java:756)
at com.badlogic.gdx.scenes.scene2d.ui.Skin.load(Skin.java:102)
at com.badlogic.gdx.assets.loaders.SkinLoader.loadSync(SkinLoader.java:75)
at com.badlogic.gdx.assets.loaders.SkinLoader.loadSync(SkinLoader.java:38)
at com.badlogic.gdx.assets.AssetLoadingTask.handleAsyncLoader(AssetLoadingTask.java:141)
at com.badlogic.gdx.assets.AssetLoadingTask.update(AssetLoadingTask.java:90)
at com.badlogic.gdx.assets.AssetManager.updateTask(AssetManager.java:561)
at com.badlogic.gdx.assets.AssetManager.update(AssetManager.java:409)
at com.badlogic.gdx.assets.AssetManager.finishLoading(AssetManager.java:437)
at ca.grasley.spaceshooter.MenuScreen.<init>(MenuScreen.java:34)
at ca.grasley.spaceshooter.SpaceShooterGame.create(SpaceShooterGame.java:25)
at com.badlogic.gdx.backends.android.AndroidGraphics.onSurfaceChanged(AndroidGraphics.java:310)
at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1555)
at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1270)