2015-06-27 32 views
3

我为我的游戏获得了这个课程,并且我想让Label高分被写入CourierNew。 .fnt和.png文件位于资产文件夹中。Missing LableStyle字体

package com.joelbrun.jetskirider.screens; 

import com.badlogic.gdx.Gdx; 
import com.badlogic.gdx.Screen; 
import com.badlogic.gdx.graphics.Color; 
import com.badlogic.gdx.graphics.GL20; 
import com.badlogic.gdx.graphics.Texture; 
import com.badlogic.gdx.graphics.g2d.BitmapFont; 
import com.badlogic.gdx.graphics.g2d.TextureRegion; 
import com.badlogic.gdx.scenes.scene2d.Stage; 
import com.badlogic.gdx.scenes.scene2d.ui.Button; 
import com.badlogic.gdx.scenes.scene2d.ui.CheckBox; 
import com.badlogic.gdx.scenes.scene2d.ui.Label; 
import com.badlogic.gdx.scenes.scene2d.ui.Table; 
import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable; 

public class MainMenu implements Screen { 

    private Stage stage; 
    private Table table; 
    private Label highscore; 
    private Button startButton, removeAdsButton; 
    private CheckBox muteCheckbox; 
    private BitmapFont CourierNew; 
    public int score = 0; 

    @Override 
    public void show() { 
     stage = new Stage(); 
     table = new Table(); 
     table.setFillParent(true); 
     CourierNew = new BitmapFont(Gdx.files.internal("CourierNew.fnt"), false); 

     Button.ButtonStyle startButtonStyle = new Button.ButtonStyle(); 
     startButtonStyle.up = new TextureRegionDrawable(new TextureRegion(new Texture(Gdx.files.internal("startButtonUp.png")))); 
     startButtonStyle.down = new TextureRegionDrawable(new TextureRegion(new Texture(Gdx.files.internal("startButtonDown.png")))); 

     Button.ButtonStyle removeAdsButtonStyle = new Button.ButtonStyle(); 
     removeAdsButtonStyle.up = new TextureRegionDrawable(new TextureRegion(new Texture(Gdx.files.internal("removeAdsButtonUp.png")))); 
     removeAdsButtonStyle.down = new TextureRegionDrawable(new TextureRegion(new Texture(Gdx.files.internal("removeAdsButtonDown.png")))); 

     CheckBox.CheckBoxStyle muteCheckboxStyle = new CheckBox.CheckBoxStyle(); 
     muteCheckboxStyle.checkboxOn = new TextureRegionDrawable(new TextureRegion(new Texture("muteCheckboxChecked.png"))); 
     muteCheckboxStyle.checkboxOff = new TextureRegionDrawable(new TextureRegion(new Texture("muteCheckboxUnchecked.png"))); 

     Label.LabelStyle highscoreStyle = new Label.LabelStyle(CourierNew, Color.YELLOW); 

     String formatted = Integer.toString(score); 
     startButton = new Button(startButtonStyle); 
     removeAdsButton = new Button(removeAdsButtonStyle); 
     muteCheckbox = new CheckBox(null, muteCheckboxStyle); 
     highscore = new Label(formatted, highscoreStyle); 

     table.add(startButton); 
     table.debug(); 
     stage.addActor(table); 


    } 

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

     stage.act(delta); 
     stage.draw(); 
    } 

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

    } 

    @Override 
    public void pause() { 

    } 

    @Override 
    public void resume() { 

    } 

    @Override 
    public void hide() { 

    } 

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

但是我总是得到错误:

06-27 14:44:55.157 15191-15235/com.joelbrun.jetskirider.android E/AndroidRuntime﹕ FATAL EXCEPTION: GLThread 78201 
Process: com.joelbrun.jetskirider.android, PID: 15191 
java.lang.IllegalArgumentException: Missing LabelStyle font. 
     at com.badlogic.gdx.scenes.scene2d.ui.Label.setStyle(Label.java:77) 
     at com.badlogic.gdx.scenes.scene2d.ui.Label.<init>(Label.java:71) 
     at com.badlogic.gdx.scenes.scene2d.ui.TextButton.<init>(TextButton.java:46) 
     at com.badlogic.gdx.scenes.scene2d.ui.CheckBox.<init>(CheckBox.java:41) 
     at com.joelbrun.jetskirider.screens.MainMenu.show(MainMenu.java:51) 
     at com.badlogic.gdx.Game.setScreen(Game.java:61) 
     at com.joelbrun.jetskirider.screens.Splash$1.onEvent(Splash.java:38) 
     at aurelienribon.tweenengine.BaseTween.callCallback(BaseTween.java:380) 
     at aurelienribon.tweenengine.BaseTween.updateStep(BaseTween.java:521) 
     at aurelienribon.tweenengine.BaseTween.update(BaseTween.java:424) 
     at aurelienribon.tweenengine.TweenManager.update(TweenManager.java:166) 
     at com.joelbrun.jetskirider.screens.Splash.render(Splash.java:48) 
     at com.badlogic.gdx.Game.render(Game.java:46) 
     at com.joelbrun.jetskirider.JetskiRider.render(JetskiRider.java:35) 
     at com.badlogic.gdx.backends.android.AndroidGraphics.onDrawFrame(AndroidGraphics.java:422) 
     at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1522) 
     at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1239) 

有什么不对?我已经尝试过真多...希望有人能帮助

回答

1

如果您按照您发布的回溯,它会导致你

com.badlogic.gdx.scenes.scene2d.ui.Label.setStyle(Label.java:77) 

如果你看一下code你会看到(在setStyle方法):

if (style.font == null) throw new IllegalArgumentException("Missing LabelStyle font."); 

哪一个是你看到的例外。所以问题是Style对象初始化为muteCheckbox(即muteCheckboxStyle)具有null作为其'font。这可以很容易地解决。拨打电话之前muteCheckbox = new CheckBox(null, muteCheckboxStyle);初始化muteCheckboxStylefont

muteCheckboxStyle.font = CourierNew; 
+0

OFC哦!我一直以为这个错误是因为这个标签 – jobr97