所以我可以在我的assetManager中加载皮肤,如下所示:
manager.load(skinAtlas, TextureAtlas.class);
manager.load(menuSkin, Skin.class, new SkinLoader.SkinParameter(skinAtlas));
但是如果我想在运行时添加.ttf字体,我该怎么做?即:
skin = new Skin();
skin.add("smallFont", smallFontT, BitmapFont.class);
skin.load(assetManager.getManager().get(assetManager.menuSkin, Skin.class)); //this does not work
答案 0 :(得分:2)
如果您的Json样式不依赖于该特定字体,则可以在加载外观后从资产管理器获取Skin对象引用后随时将其添加到现有外观。使用skin.add("smallFont", smallFontT)
将您的字体添加到现有皮肤。
您还可以在JSON文件之前指定要添加到外观的其他对象,因此JSON文件可以依赖它们。但要使用AssetManager执行此操作,必须在AssetManager将JSON文件加载到Skin之前加载这些资产。
因此,您可以在没有AssetManager的情况下直接加载这些资源,或者可以使用AssetManager加载它们(在将管理器添加到管理器之前,将它们添加到管理器中的管理器和finishLoading
)。无论哪种方式,您都需要获得JSON需要引用的每个资产的引用。
然后将它们放在ObjectMap中。例如:
ObjectMap<String, Object> resources = new ObjectMap<String, Object>();
resources.put("smallFont", smallFontT); //assuming smallFontT is a reference to a BitmapFont object
然后可以将这些资源放入SkinParameter中:
manager.load(skinAtlas, TextureAtlas.class); //I'm assuming skinAtlas is a String path to your atlas
manager.load(menuSkin, Skin.class, new SkinLoader.SkinParameter(skinAtlas, resources));
现在,JSON中的样式可以通过名称“smallFont”引用字体。