libgdx - 如何让两个或多个不同的字体文件在 libgdx 中使用一个通用的 Atlas?
问题描述
我为不同的屏幕使用不同的字体。有些字体只有几个字母,因此为每种字体生成图集会效率低下。那么有没有办法让我的所有字体都使用一个图集?
解决方案
您可以使用带有 TextureRegion 的构造函数。例如,如果您的字体和图像被命名为myFont.fnt
and myFont.png
,您可以将myFont.png
其余的 sprite 源图像放入并将其打包到纹理图集中。将.fnt
文件与您的其余资产一起放入。然后在加载纹理图集后:
myFont = new BitmapFont(Gdx.files.internal("myFont.fnt"), myTextureAtlas.findRegion("myFont"));
要在皮肤中使用它,您需要在加载 Json 文件之前将其添加到皮肤:
skin = new Skin(); // instantiate blank skin
skin.add(myFont, "myFont");
skin.load(Gdx.files.internal("mySkin.json"));
Json 文件可以通过您在将字体添加到皮肤时使用的名称来引用字体。
虽然,我强烈建议对所有事情都使用 AssetManager。在这种情况下,您的皮肤 Json 可以正常定义字体。除了以通常的方式将所有内容加载到资产管理器之外,您需要的唯一额外步骤是添加一个 BitmapFontLoader.BitmapFontParameter 来指定包含该区域的 TextureAtlas。AssetManager 将使用它来确定 BitmapFont 是否依赖于图集,因此它将以正确的顺序加载它们。
BitmapFontLoader.BitmapFontParameter fontParam = new BitmapFontLoader.BitmapFontParameter(){{
atlasName = "mySkin.pack";
}};
assetManager.load("myFont.fnt", BitmapFont.class, fontParam);
该图集应该与皮肤使用的图集相同。
推荐阅读
- javascript - 未捕获的类型错误:无法设置 null 的属性“onclick”,无法打开我的弹出窗口
- php - codeigniter 不根据 where 条件从数据库返回数据
- google-cloud-platform - 如何在 Google Cloud Platform 上更改组织名称?
- jquery - Sonarqube,使用 Jquery 库创建自定义网页
- python - 如何使用熊猫在python中生成平滑曲线
- python-3.x - Flask 中的线程不能与 UWSGI 一起使用,但可以在命令行上使用
- php - wordpress:如何指定原因“无法访问此站点”
- ios - Alamofire 上传带有进度的大文件并在应用重启时显示进度
- javascript - 如何使用javascript在其他类型为“date”的文本框中设置类型为“date”的文本框的日期
- bash - 通过变量传递命令行参数