Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在LibGDX中绘制位图字体?_Java_Libgdx - Fatal编程技术网

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。