这是我目前在我的Libgdx游戏中的渲染方法。我试图在我的关卡右上角绘制一个BitmapFont,但我得到的只是一堆白盒子。
@Override
public void render(
float delta ) {
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
this.getBatch().begin();
//myScore.getCurrent() returns a String with the current Score
font.draw(this.getBatch(), "Score: 0" + myScore.getCurrent(), 600, 500);
stage.act(Gdx.graphics.getDeltaTime());
stage.draw();
this.getBatch().end();
}
我想将得分字体添加到某种演员中,然后做一个scene.addActor(myScore),但我不知道该怎么做。 我按照Steigert的教程创建了主要的游戏类,它在AbstractLevel类中实例化了场景font,然后由这个级别进行扩展。
到目前为止,我没有使用任何自定义字体,只是空的新BitmapFont();用于默认Arial字体。后来我想用自己更精美的字体。
答案 0 :(得分:12)
尝试将stage.draw移动到stage.draw之后。将它添加到actor将非常简单,只需创建一个新类并像这样扩展Actor
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.scenes.scene2d.Actor;
public class Text extends Actor {
BitmapFont font;
Score myScore; //I assumed you have some object
//that you use to access score.
//Remember to pass this in!
public Text(Score myScore){
font = new BitmapFont();
font.setColor(0.5f,0.4f,0,1); //Brown is an underated Colour
}
@Override
public void draw(SpriteBatch batch, float parentAlpha) {
font.draw(batch, "Score: 0" + myScore.getCurrent(), 0, 0);
//Also remember that an actor uses local coordinates for drawing within
//itself!
}
@Override
public Actor hit(float x, float y) {
// TODO Auto-generated method stub
return null;
}
}
希望这有帮助!
编辑1:
同时尝试System.out.println(myScore.getCurrentScore());
只是为了确保这不是问题。你可以让它返回一个浮点数或一个int,当你执行"Score:"+
位时它会把它变成一个字符串本身
答案 1 :(得分:3)
嗯,在这种情况下,您可能需要先调用this.getBatch().end
。像这样:
mSpriteBatch.begin();
mStage.draw();
mSpriteBatch.end();
//Here to draw a BitmapFont
mSpriteBatch.begin();
mBitmapFont.draw(mSpriteBatch,"FPS",10,30);
mSpriteBatch.end();
我不知道为什么,但它对我有用。
答案 2 :(得分:2)
我在开始绘画阶段之前通过关闭批次解决了白盒子的类似问题。这是因为stage.draw()启动另一个批处理并使前一个批处理无效,结束时使用end()。
所以在当前示例中,我会在绘制阶段之前移动 this.getBatch()。end():
...
font.draw(this.getBatch(), "Score: 0" + myScore.getCurrent(), 600, 500);
this.getBatch().end();
stage.act(Gdx.graphics.getDeltaTime());
stage.draw();
}
答案 3 :(得分:-2)
如果您正在使用Scene2D,请尝试使用舞台和演员。无需编写长代码,请检查易于使用的MTX插件。您可以创建一个很棒的用户体验