13

我在认真打赌我做了一些愚蠢的事情,只是似乎没有注意到它。

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 徽标)。

因此,使用干净生成的项目,我在此处遵循本指南 http://code.google.com/p/libgdx-users/wiki/addingText2D

最后到达上面提供的代码。

问题是,为什么 !@#$ing 文本不显示!?我换了很多次位置,仍然没有运气:\

我错过了什么?

仅供参考:字体很好,我将它们放到另一个游戏中,它可以工作。

4

6 回答 6

9

尝试像这样更改投影矩阵:

Matrix4 normalProjection = new Matrix4().setToOrtho2D(0, 0, Gdx.graphics.getWidth(),  Gdx.graphics.getHeight());

batch.setProjectionMatrix(normalProjection);
于 2012-10-17T20:02:31.170 回答
9

我所做的就是

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

您可以在我的博客上阅读更多相关信息:http: //algorhymes.wordpress.com/2012/11/17/javalibgdx-fonts/

于 2013-03-28T18:56:47.557 回答
6

就我个人而言,我不太喜欢将所有字体转换为 .fnt 格式。如果您需要为某种字体设置不同的大小,则必须花费大量时间(和应用程序空间)来进行所有转换。

您可以只使用 FreeType 扩展并直接从 .ttf 加载

FreeTypeFontGenerator generator = new FreeTypeFontGenerator(fontFile);
BitmapFont font15 = generator.generateFont(15);
BitmapFont font22 = generator.generateFont(22);
generator.dispose();

更多信息在这里

渲染的完成方式与 watis 所解释的相同。

于 2013-11-18T09:43:09.480 回答
3

使用 libgdx 网站提供的 hiero 创建一个 .fnt 文件

设置字体150的大小,它将创建一个.fnt文件和一个png文件

将两个文件复制到您的资产文件夹中

现在声明字体

BitmapFont 字体;

创建方法中的 nw

font = new BitmapFont(Gdx.files.internal("data/100.fnt"), false);//100 是字体名称,你可以给你的字体起任何名字

在渲染中

字体.setscale(.2f);

font.draw(batch, "随便你写什么", x,y);

这将顺利进行

于 2013-09-24T09:15:30.363 回答
2

您的代码的主要问题是您创建了
viewportWidth = 1 &
viewportHeight = width/height的相机

并且您正在以 width*0.5f & height*0.5f 绘制字体,这超出了相机的范围

将相机初始化更改为

camera = new OrthographicCamera(width, height);

....或将绘制字体语句更改为

font.setScale(1,height/width);
font.draw(batch, str, 0.5f, height/width*0.5f);
于 2013-06-18T18:51:46.043 回答
1

您是否尝试过像这样手动提供位置。我希望这能工作 batch.setProjectionMatrix(camera.combined); 批处理.enableBlending(); 批处理.开始();
font.draw(batch, yourString, 100,100);
批处理.end();

于 2013-04-11T12:15:55.500 回答