Java 如何在LibGDX中绘制位图字体?
我真的打赌我做了一些愚蠢的事情,只是似乎没有注意到Java 如何在LibGDX中绘制位图字体?,java,libgdx,Java,Libgdx,我真的打赌我做了一些愚蠢的事情,只是似乎没有注意到 package com.me.mygdxgame; import com.badlogic.gdx.ApplicationListener; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.GL10; import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.graphic
package com.me.mygdxgame;
import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.Texture.TextureFilter;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
public class Locked implements ApplicationListener
{
private OrthographicCamera camera;
private SpriteBatch batch;
private Texture texture;
private Sprite sprite;
private BitmapFont font;
private CharSequence str = "Hello World!";
private float width;
private float height;
@Override
public void create()
{
width = Gdx.graphics.getWidth();
height = Gdx.graphics.getHeight();
camera = new OrthographicCamera(1, height / width);
batch = new SpriteBatch();
texture = new Texture(Gdx.files.internal("data/libgdx.png"));
texture.setFilter(TextureFilter.Linear, TextureFilter.Linear);
TextureRegion region = new TextureRegion(texture, 0, 0, 512, 275);
sprite = new Sprite(region);
sprite.setSize(0.9f, 0.9f * sprite.getHeight() / sprite.getWidth());
sprite.setOrigin(sprite.getWidth() / 2, sprite.getHeight() / 2);
sprite.setPosition(-sprite.getWidth() / 2, -sprite.getHeight() / 2);
font = new BitmapFont(Gdx.files.internal("data/digib.fnt"),
Gdx.files.internal("data/digib.png"), false);
}
@Override
public void dispose()
{
batch.dispose();
texture.dispose();
}
@Override
public void render()
{
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
batch.setProjectionMatrix(camera.combined);
batch.begin();
font.setColor(0.0f, 0.0f, 0.0f, 1.0f);
//sprite.draw(batch);
font.draw(batch, str, width*0.5f, height*0.5f);
batch.end();
}
@Override
public void resize(int width, int height)
{
}
@Override
public void pause()
{
}
@Override
public void resume()
{
}
}
该项目是使用他们提供的模板工具生成的gdx setup ui.jar
正如您在代码中所看到的,我没有费心去掉默认代码(只是一些简单的绘制代码来渲染LibGDX徽标)
因此,对于干净生成的项目,我遵循了以下指南
最后带着上面提供的代码到达
问题是,为什么不呢@#$正在播放的文字秀!?我换了很多次位置,但还是不走运:\
我错过什么了吗
仅供参考:字体很好,我把它们放到了另一个游戏中,效果很好。尝试如下更改投影矩阵:
Matrix4 normalProjection = new Matrix4().setToOrtho2D(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
batch.setProjectionMatrix(normalProjection);
我所做的就是
spriteBatch = new SpriteBatch();
font = new BitmapFont(Gdx.files.internal("data/nameOfFont.fnt"),
Gdx.files.internal("data/nameOfFont.png"), false);
和在渲染方法中
spriteBatch.begin();
font.setColor(1.0f, 1.0f, 1.0f, 1.0f);
font.draw(spriteBatch, "some string", 25, 160);
spriteBatch.end();
你可以在我的博客上读到更多关于它的信息:你有没有尝试过像这样手动给出职位。我希望这能奏效 batch.setProjectionMatrix(camera.combined); batch.enablembling(); batch.begin()
绘制字体(批,字符串,100100)
batch.end() 您的代码的主要问题是您使用
创建了照相机 viewportWidth=1&
视口高度=宽度/高度 你画的字体宽度为*0.5f,高度为*0.5f,这超出了相机的范围 将相机初始化更改为
camera = new OrthographicCamera(width, height);
。。。。
或者将draw font语句更改为
font.setScale(1,height/width);
font.draw(batch, str, 0.5f, height/width*0.5f);
使用libgdx网站提供的hiero创建.fnt文件 设置字体150的大小,它将创建一个.fnt文件和一个png文件 复制资产文件夹中的两个文件 现在声明字体 位图字体 创建方法中的nw font=新的位图字体(Gdx.files.internal(“data/100.fnt”),false)//100是字体名称,您可以为字体指定任何名称 渲染中 字体设置比例(.2f) 绘制(批处理“你想写什么”,x,y)
这将很顺利就我个人而言,我不太喜欢将所有字体转换为.fnt格式。如果你需要不同的字体大小,你必须花费大量的时间(和应用空间)来进行所有的转换 您可以直接使用FreeType扩展并从.ttf加载
FreeTypeFontGenerator generator = new FreeTypeFontGenerator(fontFile);
BitmapFont font15 = generator.generateFont(15);
BitmapFont font22 = generator.generateFont(22);
generator.dispose();
更多信息
渲染的方式与watis解释的相同。我不能使用generator.generateFont(int);因为它不存在。您只能传入FreeTypeFontParameter此处有关于使用FreeTypeFontGenerator的教程>您不能在LibGDX HTML项目中使用FreeTypeFontGenerator。