2014-05-17 176 views
2

我正在製作一個RPG,並希望加載對話框.json按文件夾按級別分隔。每個Level文件夾都有任務對話框.json,即使它還沒有被玩家完成。循環遍歷文件夾中的文件

文件夾結構:

enter image description here

我發送與玩家已完成任務的陣列(盒裝在上述紅色):

jsonFilesArray = ["101", "102", "103", "104", "201"];

allLevelsArray = [1, 2]

我喜歡動態地循環播放Levels文件夾s並只查看已完成的任務號碼(在jsonFilesArray中)。

這段代碼工作的方式是,它在所有級別上循環,搜索可能不在其文件夾中的文件。 (例如:當它通過2級文件夾循環時,它不會找到quest_101.json,因此它會中斷)。

$.each(allLevelsArray, function (i, levelNum) { 
    $.each(jsonFilesArray, function (i, jsonQuestID) { 
     $.getJSON("dialog/Level "+levelNum+"/quest_"+jsonQuestID+".json", function(json) { 
      //do stuff 
     }); 
    }); 
}); 

如何我可以動態地遍歷所有級別的文件夾搜索只在任務給予jsonFilesArray?我寧願不要擔心通過關卡文件夾循環。

感謝

+1

壓扁他們都到一個文件夾/數組,然後搜索這一點。鑑於文件命名模式,你不應該有任何名稱衝突。 – dandavis

回答

1

爲什麼連一個allLevelsArray如果你存儲在您的jsonFilesArray的水平呢?

爲什麼不組織你的陣列,像這樣:

jsonFilesArray = ["1-01", "1-02", "1-03", "1-04", "2-01"]; 

然後循環是這樣的:

$.each(jsonFilesArray, function (i, jsonQuestID) { 
    var level = jsonQuestID.slice(0, jsonQuestID.indexOf('-')); 
    var quest = jsonQuestID.slice(jsqonQuestID.indexOf('-') + 1); 
    $.getJSON("dialog/Level "+ level +"/quest_"+ (level + quest) +".json", function(json) { 
     //do stuff 
    }); 
}); 

或者,如果你保持在同一文件夾中的所有文件(這是完全可行的考慮您的命名約定),並假設您的原始陣列:

$.each(jsonFilesArray, function (i, jsonQuestID) { 
    $.getJSON("dialog/quest_"+ jsonQuestID +".json", function(json) { 
     //do stuff 
    }); 
}); 

如果有任何特定的你需要爲每個級別重複做,我建議無論是二維數組或對象的數組:

jsonFilesArray = [{level: 1, quests: ["01", "02", "03", "04"]}, {level: 2, quests: ["01"]}]; 

$.each(jsonFilesArray, function (i, levelObj) { 
    //do stuff with level 
    $.each(levelObj.quests, function (i, quest) { 
     $.getJSON("dialog/quest_"+ (levelObj.level + quest) +".json", function(json) { 
      //do stuff 
     }); 
    }); 
});