我正在用levels.I工作在無盡的運行遊戲。我想爲第一級設置障礙。我想用json來做,但因爲我嘗試json首次解析。以正確的方式將json數據映射到java對象 - LibGdx
我創建了一個JSON文件是這樣的:
{
"screen1":
[
{"name":"rock","position":"middle","distance":"400","speed":"0"}
],
"screen2":
[
{"name":"snake","position":"up","distance":"100","speed":"0"},
{"name":"watersnake","position":"up","distance":"800","speed":"0"}
],
"screen3":
[
{"name":"rock","position":"middle","distance":"400","speed":"0"},
{"name":"gorilla","position":"middle","distance":"500","speed ":"0"},
{"name":"crow","position":"up","distance":"200","speed":"0"}
],
"screen4":
[
{"name":"crocodile","position":"up","distance":"600","speed":"0"},
{"name":"gap","position":"up","distance":"700","speed":"0"},
{"name":"cloud","position":"up","distance":"300","speed":"0"}
],
"screen5":
[
{"name":"gorilla","position":"middle","distance":"500","speed ":"0"}
]
}
其實我分整個移動背景5 screens.For每個屏幕,我想作爲JSON文件中指定的地方障礙。
爲此,我想將解析的json映射到java對象。
所以我創建了一個方法,像這樣解析:
public void loadLevelJson(String fileName,String entryName)
{
JsonValue jsonValue = new JsonReader().parse(Gdx.files.internal(fileName));
JsonValue objList = jsonValue.get(entryName);
// System.out.println("name:" + objList);
if (entryName.equals("screen2")){
System.out.println("____________"+entryName);
for(JsonValue value : objList.iterator())
{
if(value.getString("name").equals("rock"))
{
rockSpeed=value.getFloat("speed");
rockpos=value.getString("position");
rockX=value.getFloat("distance");
if(value.getString("position").equals("middle"))
rockY=Constants.BIG_ROCK_Y;
}
if(value.getString("name").equals("snake"))
{
snakeSpeed=value.getFloat("speed");
snakePos=value.getString("position");
snakeX=value.getFloat("distance");
if(value.getString("position").equals("up"))
snakeY=Constants.SNAKE_Y;
}
if(value.getString("name").equals("watersnake"))
{
w_snakeSpeed=value.getFloat("speed");
w_snakePos=value.getString("position");
w_snakeX=value.getFloat("distance");
if(value.getString("position").equals("down"))
w_snakeY=Constants.W_SNAKE_Y;
}
if(value.getString("name").equals("gorilla"))
{
gorillaSpeed=value.getFloat("speed");
gorillaPos=value.getString("position");
gorillaX=value.getFloat("distance");
if(value.getString("position").equals("middle"))
gorillaY=Constants.GORILLA_Y;
}
if(value.getString("name").equals("crow"))
{
crowSpeed=value.getFloat("speed");
crowPos=value.getString("position");
crowX=value.getFloat("distance");
if(value.getString("position").equals("up"))
crowY=Constants.CROW_Y;
}
if(value.getString("name").equals("gap"))
{
gapSpeed=value.getFloat("speed");
gapPos=value.getString("position");
gapX=value.getFloat("distance");
if(value.getString("position").equals("down"))
gapY=Constants.GAP_Y;
}
if(value.getString("name").equals("cloud"))
{
cloudSpeed=value.getFloat("speed");
cloudPos=value.getString("position");
cloudX=value.getFloat("distance");
if(value.getString("position").equals("up"))
cloudY=Constants.CLOUD_Y;
}
if(value.getString("name").equals("cloud"))
{
crocodileSpeed=value.getFloat("speed");
crocodilePos=value.getString("position");
crocodileX=value.getFloat("distance");
if(value.getString("position").equals("down"))
crocodileY=Constants.CROCODILE_Y;
}
}
}
}
但我真的得到了如何解析這些東西與每個屏幕和障礙映射到屏幕和對象類很難created.Fully困惑,因爲我第一次使用json。
如果有人提出一些想法繼續,這將是非常有益的。
在此先感謝。
謝謝您的回答!我現在面臨的問題是screens.I要推廣代碼,這樣它應該自動拍攝畫面號爲每個level.Now我在一個不正確的與每個屏幕只是想爲什麼我應該使用ArrayList?如果你稍微詳細說明了答案,這將非常有幫助。我在我的問題中編輯了代碼。 – Niranjana
您發佈的代碼具有硬編碼障礙變量,用於閱讀json的重複代碼並且不容易擴展(如果添加新障礙,該怎麼辦?)。所以通過推廣你的代碼來確定你的意思。不確定我是否能夠獲得更多的幫助,因爲真的不知道你想要做的每件小事。我發佈的例子展示瞭如何快速讀取屏幕的json值。所以推斷,並且當你有一個新的屏幕時讀取每個json,或者遍歷所有sreens的json一次,並在我的例子中創建一個列表的列表。 –
感謝您的回覆!實際上我嘗試了一些我自己的東西,但沒有關於json及其用法的正確知識。現在我做了一些研究,我想按照您的示例進行操作,因爲我認爲它是正確的方式。 – Niranjana