我正在制作一个RPG,并希望加载由Levels按文件夹分隔的对话框.json。每个Level文件夹都有所有任务对话框.json,即使它尚未由玩家完成。
文件夹结构:
我发送一个数组,其中包含玩家已经完成的任务(上面用红色框):
jsonFilesArray = ["101", "102", "103", "104", "201"];
allLevelsArray = [1, 2]
我想动态遍历Levels
个文件夹,只查看已完成的任务编号(jsonFilesArray
)。
此代码的工作方式是,它会循环遍历所有级别,搜索可能不在其文件夹中的文件。 (例如:当它循环通过Level 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
中给出的任务?我甚至不想担心循环Levels文件夹。
谢谢
答案 0 :(得分:2)
如果你在jsonFilesArray中存储关卡,为什么甚至会有allLevelsArray呢?
为什么不像这样构建数组:
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
});
});
});