[英]libgdx adding score BitmapFont
我正在嘗試在游戲中添加一個分數,它應該以分數:0開頭,並且每當物體被命中時,在分數中添加1。 字體正在工作,並且顯示“ score:” [不是0] Collision有效。
public class PlayState extends State {
private int score;
private String scoreName;
private BitmapFont font;
public PlayState(GameStateManager gsm) {
super(gsm);
score = 0;
scoreName = "score: 0";
font = new BitmapFont(Gdx.files.internal("font.fnt"));
}
@Override
public void update(float dt) {
handleInput();
if(ObjectA.collides(ObjectB.getBounds()))
scoreName = "score: " + ++score;
}
@Override
public void render(SpriteBatch sb) {
sb.setProjectionMatrix(cam.combined);
sb.begin();
font.setColor(0.5f, 0.5f, 0.5f, 0.5f);
font.getData().setScale(0.4f);
font.draw(sb, scoreName, cam.position.x, cam.position.y);
sb.end();
}
ApplicationAdapter類
public class XY extends ApplicationAdapter {
public static final int WIDTH = 480;
public static final int HEIGHT = 800;
public static final String TITLE = "XY";
private GameStateManager gsm;
private SpriteBatch batch;
@Override
public void create () {
batch = new SpriteBatch();
gsm = new GameStateManager();
Gdx.gl.glClearColor(1, 0, 0, 1);
gsm.push(new MenuState(gsm));
}
@Override
public void render () {
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
gsm.update(Gdx.graphics.getDeltaTime());
gsm.render(batch);
}
@Override
public void dispose () {
super.dispose();
}
GameStateManager
public class GameStateManager {
private Stack<State> states;
public GameStateManager(){
states = new Stack<State>();
}
public void push(State state){
states.push(state);
}
public void pop(){
states.pop().disposed();
}
public void set(State state){
states.pop().disposed();
states.push(state);
}
public void update(float dt){
states.peek().update(dt);
}
public void render(SpriteBatch sb){
states.peek().render(sb);
}
}
您需要預先遞增,以便樂譜名稱具有更新后的值。
if(ObjectA.collides(ObjectB.getBounds()))
scoreName = "score: " + ++score;
}
您之前的代碼將始終在比實際分數晚一點的位置顯示分數名稱。
此外,根據您的代碼,您需要在調用main上的update之后調用總渲染,否則您的分數將不會被更新。 最后,當您引用類內部的類屬性時,請習慣於編寫this.score
。
根據給定的代碼,如果您要從游戲的render
方法調用update
方法,則得分值會不斷增加。 當ObjectA.collides(ObjectB.getBounds()
時,將分數附加字符串值分配給scoreName。
命中后,將分數增加1並將新值添加到用於顯示分數的scoreName。
@Override
public void update(float dt) {
handleInput();
if(ObjectA.collides(ObjectB.getBounds())){
score++;
scoreName = "score: " + score;
}
}
但這不是您的問題,問題是字體無法在屏幕上以增加的值繪制分數。
可能的原因可能是您的字體沒有數字字符,因此請檢查您的字體及其.png
文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.