2016-05-17 4 views
1

アセットマネージャを使用してスキンをロードしていて、エラーが発生しています(There is no Bitmapfont registered with name: font_dpb_59)。私はjson-fileでこのフォントを使ってLabel-styleを作成しようとしています。 スキンのパラメータにフォントとアトラスを追加していますが、ここで何か不足していますか?LibGdx - アセットマネージャからjsonファイルをロード中にエラーが発生しました

私はこのような私の肌をロードする:あなたは、私がパラメータとしてフォントを追加参照して、エラーを取得することができたよう

 ObjectMap<String, Object> font_map = new ObjectMap<String, Object>(); 
     font_map.put("font_dpb_59", font_dpb_59); 
     font_map.put("font_dpm_40", font_dpm_40); 
     //... some more fonts 

     manager.load(skinAtlas, TextureAtlas.class); 
     manager.load(menuSkin, Skin.class, new SkinLoader.SkinParameter(skinAtlas, font_map)); 

。私は間違って何をしているのか分からず、フォントはスキンの前に読み込まれます。

のフルスタックトレース:

Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: com.badlogic.gdx.utils.SerializationException: Error reading file: menu_ui/ui_skin.json 
    at com.badlogic.gdx.assets.AssetManager.handleTaskError(AssetManager.java:570) 
    at com.badlogic.gdx.assets.AssetManager.update(AssetManager.java:375) 
    at com.scene2d.space_camp.MyGdxGame.create(MyGdxGame.java:127) 
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:147) 
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:124) 
Caused by: com.badlogic.gdx.utils.SerializationException: Error reading file: menu_ui/ui_skin.json 
    at com.badlogic.gdx.scenes.scene2d.ui.Skin.load(Skin.java:97) 
    at com.badlogic.gdx.assets.loaders.SkinLoader.loadSync(SkinLoader.java:75) 
    at com.badlogic.gdx.assets.loaders.SkinLoader.loadSync(SkinLoader.java:38) 
    at com.badlogic.gdx.assets.AssetLoadingTask.handleAsyncLoader(AssetLoadingTask.java:141) 
    at com.badlogic.gdx.assets.AssetLoadingTask.update(AssetLoadingTask.java:90) 
    at com.badlogic.gdx.assets.AssetManager.updateTask(AssetManager.java:498) 
    at com.badlogic.gdx.assets.AssetManager.update(AssetManager.java:373) 
    ... 3 more 
Caused by: com.badlogic.gdx.utils.SerializationException: Error reading file: menu_ui/ui_skin.json 
    at com.badlogic.gdx.utils.Json.fromJson(Json.java:694) 
    at com.badlogic.gdx.scenes.scene2d.ui.Skin.load(Skin.java:95) 
    ... 9 more 
Caused by: com.badlogic.gdx.utils.SerializationException: Serialization trace: 
{}."com.badlogic.gdx.scenes.scene2d.ui.Label$LabelStyle".font_dpb_59.font 
font (com.badlogic.gdx.scenes.scene2d.ui.Label$LabelStyle) 
    at com.badlogic.gdx.utils.Json.readFields(Json.java:804) 
    at com.badlogic.gdx.utils.Json.readValue(Json.java:919) 
    at com.badlogic.gdx.scenes.scene2d.ui.Skin$1.readValue(Skin.java:408) 
    at com.badlogic.gdx.utils.Json.readValue(Json.java:852) 
    at com.badlogic.gdx.scenes.scene2d.ui.Skin$2.readNamedObjects(Skin.java:429) 
    at com.badlogic.gdx.scenes.scene2d.ui.Skin$2.read(Skin.java:418) 
    at com.badlogic.gdx.scenes.scene2d.ui.Skin$2.read(Skin.java:414) 
    at com.badlogic.gdx.utils.Json.readValue(Json.java:884) 
    at com.badlogic.gdx.scenes.scene2d.ui.Skin$1.readValue(Skin.java:408) 
    at com.badlogic.gdx.utils.Json.fromJson(Json.java:692) 
    ... 10 more 
Caused by: com.badlogic.gdx.utils.GdxRuntimeException: No com.badlogic.gdx.graphics.g2d.BitmapFont registered with name: font_dpb_59 
    at com.badlogic.gdx.scenes.scene2d.ui.Skin.get(Skin.java:149) 
    at com.badlogic.gdx.scenes.scene2d.ui.Skin$1.readValue(Skin.java:407) 
    at com.badlogic.gdx.utils.Json.readFields(Json.java:797) 
    ... 19 more 

これはここに役立ちます場合は、私のJSONファイルです:

{ 
    "com.badlogic.gdx.graphics.Color": { 
    "white": { 
     "r": 1, "g": 1, "b": 1, "a": 1 
    } 
    }, 

    "com.badlogic.gdx.scenes.scene2d.ui.Label$LabelStyle": { 
    "font_dpb_59": { 
     "font": "font_dpb_59", "fontColor": "white" 
    } 
    }, 

    "com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle": { 
    "txt_btn_white": { 
     "up": "button1", 
     "down": "button1", 
     "font": "font_dpb_59", 
     "fontColor": "white", 
     "pressedOffsetX": 1, 
     "pressedOffsetY": -1 } 
    }, 

    "com.badlogic.gdx.scenes.scene2d.ui.Button$ButtonStyle": { 
    "btn_white": { 
     "up": "button1" , 
     "down": "button1", 
     "pressedOffsetX": 1, 
     "pressedOffsetY": -1 } 
    }, 
    "com.badlogic.gdx.scenes.scene2d.ui.ScrollPane$ScrollPaneStyle": { 
    "default": { } 
    }, 

    "com.badlogic.gdx.scenes.scene2d.ui.Window$WindowStyle": { 
    "default": { "titleFont": "font_dpb_59", "titleFontColor": "white" } 
    } 
} 

EDIT:

FileHandleResolver resolver = new InternalFileHandleResolver(); 
     manager.setLoader(FreeTypeFontGenerator.class, new FreeTypeFontGeneratorLoader(resolver)); 
     manager.setLoader(BitmapFont.class, ".ttf", new FreetypeFontLoader(resolver)); 

     FreetypeFontLoader.FreeTypeFontLoaderParameter params59 = new FreetypeFontLoader.FreeTypeFontLoaderParameter(); 
     params59.fontFileName = font_dpb_59; 
     params59.fontParameters.size = 59; 
     manager.load(font_dpb_59, BitmapFont.class, params59); 

これは私がフォントをロードする方法であります

+0

問題があるかどうか不明です。あなたのフォントはBitmapFontオブジェクトではありませんか? BitmapFontのサブクラスであれば、スキンにBitmapFontとして登録されません。 – Tenfour04

+0

@ Tenfour04は、どのようにbitmapfontオブジェクトをロードするかを示すコードを追加しました。これはすべて同時にロードされるので(つまり、決してfinishLoadingを呼び出すことはできません)、フォントはスキンの前にロードされませんか?私はスキンの前にフォントをロードするので、ちょっと変わってしまうでしょう。 –

+0

読み込みが完了していない場合、どのようにBitmapFontへの参照を持っていますか?私は、はい、これが問題だと言うでしょう。実際には、 'font_dpb_59'はあなたのFontFileNameパラメータであることが疑わしいです。なぜなら、それはObjectMapに入れたリソースの名前だからです。たぶんBitmapFontsの代わりにStringをSkinParameterに渡したことがあります。 – Tenfour04

答えて

1

渡すオブジェクト

ObjectMap<String, Object> font_map = new ObjectMap<String, Object>(); 
font_map.put("font_dpb_59", font_dpb_59); 
font_map.put("font_dpm_40", font_dpm_40); 

は、文字列パスではなくBitmapFontオブジェクトである必要があります。 BitmapFontインスタンスを取得するには、すでにインスタンスのロードが完了している必要があります。 AssetManagerを使用してそれらをロードする場合は、アセットマネージャでfinishLoadingを呼び出し、次にget(".....", BitmapFont.class)を呼び出して、オブジェクトマップに入れるBitmapFont参照を取得する必要があります。

FreeTypeFontGeneratorを使用してBitmapFontsを実行時に作成していたため、これを実行していると仮定していたため、Jsonから読み込む方法はありませんでした。しかし、すでにフォントファイルを持っている場合は、スキンのJsonファイルに直接入れることはできません。

com.badlogic.gdx.graphics.g2d.BitmapFont: { 
    font_dpb_59: { file: path/to/font_dpb_59.fnt, 
        scaledSize: 12, //integer height of capital letters 
        markupEnabled: false, 
        flip : false}, 
} 
+0

ああ本当ですか?私はちょうどAssetManagerに何らかの形で干渉すると思っていました。ですから、実際にassetManagerを使ってフォントを読み込む必要はありませんか?私はちょうど直接皮膚に追加することができ、私はスキンを処分するとき、私は自動的にフォントを処分する?しかし、私は上記のようにフォントのサイズをパラメータで設定することはできません。 –

+0

私は、フォントを読み込むための別々のメソッドを作ろうとしましたが、他のものが始まる前に読み込みが完了していることを確認しました。ありがとうございました:Dフォントサイズを設定する必要があるので、これは重要です。 –

+0

実際にフォントにいくつかのパラメータを設定できます。上記の更新を参照してください。 'scaledSize'は、大文字の高さの整数ピクセルの個数なので、スケールと正確に同じではありません。 – Tenfour04

関連する問題