当前位置: 首页 > 知识库问答 >
问题:

如何在libgdx中的后台绘制位图字体?

长孙诚
2023-03-14

这是我在Libgdx游戏中的当前渲染方法。我试图在关卡的右上角画一个位图字体,但我得到的只是一堆白色框。

 @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();
        }

我想把乐谱字体添加到某种演员中,然后做一个场景。addActor(myScore),但我不知道怎么做。我按照Steigert的教程创建了一个主游戏类,该类在AbstractLevel类中实例化了场景font,然后扩展到这个级别。

到目前为止,我没有使用任何自定义字体,只是空的新BitmapFont();用于默认Arial字体。后来我想用我自己更花哨的字体。

共有3个答案

通令
2023-03-14

我已经通过在开始绘图阶段之前关闭批次解决了白色盒子的类似问题。这是因为stage.draw()启动了另一个批次,并使未以end()结束的前一个批次无效。

所以在当前的例子中,我会移动这个。getBatch()。在绘图阶段之前结束()

    ...
    font.draw(this.getBatch(), "Score: 0" + myScore.getCurrent(), 600, 500);
    this.getBatch().end();
    stage.act(Gdx.graphics.getDeltaTime());
    stage.draw();
    }
萧嘉禧
2023-03-14

在这种情况下,您可能需要调用this。getBatch()。先结束。这样地:

mSpriteBatch.begin();
mStage.draw();
mSpriteBatch.end();
//Here to draw a BitmapFont
mSpriteBatch.begin();
mBitmapFont.draw(mSpriteBatch,"FPS",10,30);
mSpriteBatch.end();

我不知道为什么,但它对我有用。

谭学名
2023-03-14

尝试将font.draw移动到stage.draw.之后将其添加到演员将非常简单,只需创建一个新类并扩展演员

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.get货币得分());只是为了确保这不是问题。你可以让它返回一个浮点数或一个int,当你执行"Score:"位时,它会把它本身变成一个字符串

 类似资料:
  • 问题内容: 我非常敢打赌,我做了一些愚蠢的事情,只是似乎没注意到。 该项目是使用提供 gdx-setup-ui.jar 的模板工具生成的。 正如您在代码中所看到的,我没有费心去掉默认代码(只是一些简单的绘制代码来渲染LibGDX徽标)。 因此,对于干净生成的项目,我在这里遵循了本指南 http://code.google.com/p/libgdx- users/wiki/addingText2D

  • 问题内容: 我想创建一个消息框,当您接受时该消息框会褪色,但是我不知道如何更改字体的字母, 这是我的字体处理方式: 谁能帮我 ?:)我很抱歉我的英语,这不是我的母语。 问题答案: 这将更改所有后续绘制的字体的字母。因此,一旦绘制该消息,您可能希望再次将其设置为完全不透明。

  • parameter.size=30; parameter.characters=“abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789.'()>?:”; font=generator.generateFont(参数); gdx.gl20.glclear(GL20.gl_color_buffer_bit); Begin(); f

  • 我正在使用位图字体渲染文本。问题是我决定使用TrueTypeFontFactory。createBitmapFont方法创建BitmapFont,以便我可以使用自己的字体而不是默认字体。除了在使用TrueTypeFontFactory之前在y轴上翻转文本外,文本渲染没有任何问题。createBitmapFont方法我只需要创建一个BitmapFont并在构造函数中传递true来翻转它,但是现在我使

  • 问题内容: 好的,我有这个代码 并且它将淡蓝色的背景绘制到屏幕上。我正在尝试创建一个渐变,该渐变从顶部的深蓝色到底部的浅蓝色。有没有简单的方法可以做到这一点?我是Libgdx和OpenGL的新手,所以我正尝试从书中学习,但我似乎找不到答案。我听说过要绘制一个大正方形并为顶点设置不同的颜色,但是我不确定该怎么做。 问题答案: 在libGDX中,ShapeRenderer对象包含一个方法,该方法为其位

  • 我的迭代器 我的绘图方法