在Libgdx中使用1字体制作不同的字体大小BitmapFont

时间:2014-03-24 04:55:03

标签: libgdx

我在libgdx中使用缩放字体时遇到问题。我想使用1个文件.fnt到3种不同的字体比例。但结果是字体仍然具有相同的比例,无论我将它们逐一缩放。

这是我的代码,我正在使用AssetManager。

// this is I load the assetsFont
// Settings.fileSilverBoldFont is font location.

// load font
manager.load(Settings.fileSilverBoldFont, BitmapFont.class);
BitmapFont defaultFont = manager.get(Settings.fileSilverBoldFont, BitmapFont.class);

// edited, old -> defaultSmall = defaultFont; (reference object, my fault)
BitmapFont defaultSmall= new BitmapFont(defaultFont.getData(), defaultFont.getRegion(), true);
BitmapFont defaultNormal= defaultFont.getCache().getFont();
BitmapFont defaultBig= new BitmapFont(defaultFont.getData(), defaultFont.getRegion(), false);;

// set font sizes
defaultSmall.setScale(0.75f / Settings.widthRatio, 0.75f / Settings.heightRatio);
defaultNormal.setScale(1.0f / Settings.widthRatio, 1.0f / Settings.heightRatio);
defaultBig.setScale(2.0f / Settings.widthRatio, 2.0f / Settings.heightRatio);

// enable linear texture filtering for smooth fonts
defaultSmall.getRegion().getTexture().setFilter(TextureFilter.Linear, TextureFilter.Linear);
defaultNormal.getRegion().getTexture().setFilter(TextureFilter.Linear, TextureFilter.Linear);
defaultBig.getRegion().getTexture().setFilter(TextureFilter.Linear, TextureFilter.Linear);

然后我将我的字体填充到我的游戏控制器initFont()。

public void initFont(){
    distanceFont = new BitmapFontCache(Assets.assetFont.defaultBig).getFont();
    scoreFont = new BitmapFontCache(Assets.assetFont.defaultSmall).getFont();
}

最后我在render()中将我的字体渲染到屏幕,我使用变量控制器调用游戏控制器。

public void render(float delta){
    controller.scoreFont.draw(hudBatch, controller.scoreText, 160/Settings.widthRatio, hudCam.viewportHeight - (40/ Settings.heightRatio));
    controller.distanceFont.draw(hudBatch, controller.distanceText, hudCam.viewportWidth/2, hudCam.viewportHeight - (40/ Settings.heightRatio));
}

我想得分,不得画小和远距离画大字体。但结果2他们仍然有相同的大小。我怎么能得到我的得分用小字体画和用大字体绘制距离?

发现java中的引用对象,现在我正在使用它的新对象进行更改,它仍然相同,我不能有不同大小的字体。

现在我找到了,我必须多次使用BitmapFont加载,这就是我所做的解决方案。我不知道如何正确使用AssetManager来做到这一点,也许这对于这种情况就足够了。

// create three fonts using Libgdx's built-in 15px bitmap font
silverBoldSmall = new BitmapFont(Gdx.files.internal(Settings.fileSilverBoldFont));
silverBoldNormal = new BitmapFont(Gdx.files.internal(Settings.fileSilverBoldFont));
silverBoldBig = new BitmapFont(Gdx.files.internal(Settings.fileSilverBoldFont));

// set font sizes
silverBoldSmall.setScale(2f / Settings.widthRatio, 2f / Settings.heightRatio);
silverBoldNormal.setScale(3f / Settings.widthRatio, 3f / Settings.heightRatio);
silverBoldBig.setScale(4f / Settings.widthRatio, 4f / Settings.heightRatio);

2 个答案:

答案 0 :(得分:0)

您只有一个字体实例。

BitmapFont defaultSmall= defaultFont;
BitmapFont defaultNormal= defaultFont;
BitmapFont defaultBig= defaultFont;

然后在相同的字体上更改比例三次......

defaultSmall.setScale(0.75f / Settings.widthRatio, 0.75f / Settings.heightRatio);
defaultNormal.setScale(1.0f / Settings.widthRatio, 1.0f / Settings.heightRatio);
defaultBig.setScale(2.0f / Settings.widthRatio, 2.0f / Settings.heightRatio);

如果指出这一点并不合理,那么你就会了解Java中的引用是如何工作的。

我必须多次直接使用BitmapFont加载,也许这对于这种情况就足够了。

// create three fonts using Libgdx's built-in 15px bitmap font
BitmapFont defaultSmall= new BitmapFont(Gdx.files.internal(Settings.fileSilverBoldFont));
BitmapFont defaultNormal= new BitmapFont(Gdx.files.internal(Settings.fileSilverBoldFont));
BitmapFont defaultBig= new BitmapFont(Gdx.files.internal(Settings.fileSilverBoldFont));

答案 1 :(得分:0)

我知道这已经过时了,但这与我浏览的人有关。

如果您从皮肤中获取字体(例如font = skin.getFont("fontName")),解决方法是修改您的json文件并定义多个字体,这些字体都指向您图集中的相同字体。

就我而言,这看起来像这样

com.badlogic.gdx.graphics.g2d.BitmapFont: {
    HelveticaNeue-Light: {
        file: HelveticaNeue-Light.fnt
    }
    HelveticaNeue-Light2: {
        file: HelveticaNeue-Light.fnt
    }
}

然后在从皮肤抓取字体时,您可以访问多个不同的字体,这将创建单独的实例。