libGDx开发游戏中出现错误,当我尝试包含A MenuScreeen时

时间:2020-10-24 18:04:35

标签: java android libgdx

您好,我正在开发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进行游戏开发方面有些过时了,并且对此有所了解,请感谢您的帮助!

1 个答案:

答案 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)