我在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);
答案 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
}
}
然后在从皮肤抓取字体时,您可以访问多个不同的字体,这将创建单独的实例。