使用p5.js,是否可以预加载.json文件中定义的一些.json文件,该文件本身预先加载了preload()函数?

时间:2018-02-12 17:04:26

标签: javascript json p5.js

我正在开发一个 p5.js 项目,该项目从JSON文件加载一些配置选项。我在p5.js的preload()函数中预加载配置文件,如下所示:

let config = {};

function preload() {
    config = loadJSON("data/config.json");
}

配置JSON文件的一部分包含一些song个对象,每个对象都有一个filename属性,这是我想要预加载的另一个JSON文件:

"songs": [
    {
        "title": "Song One",
        "filename": "01.json"
    },
    ...
]

我无法在p5.js的setup()函数之前访问配置文件数据(因为我无法保证配置文件在此之前已被完全读取),此时我无法再预加载歌曲JSON文件。 / p>

我正在试图弄清楚是否有任何解决方法。

编辑:感谢乔治的回答,我的工作原理如下。以下所有内容都在输入p5.js的setup()函数之前运行,这是我所追求的:

let config = {};

function preload() {
    config = loadJSON("config.json", configLoaded);
}

function configLoaded(_config) {
    let songs_length = _config.album.songs.length;
    for (let i = 0; i < songs_length; i++) {
        loadJSON("data/" + _config.album.songs[i].filename, songLoaded);
    }
}

function songLoaded(_song) {
    console.log(_song);
}

2 个答案:

答案 0 :(得分:3)

您应该可以加载loadJSON()并设置回加载数据或错误时的回调。

希望如果一切都安排得井井有条,那么简单的事情就应该有效:

function preload() {
    config = loadJSON("data/config.json");
    loadJSON(config.songs[0].filename,songOneLoaded);
}

function songOneLoaded(data){
    console.log("song one data loaded",data);
}

注意我无法测试上述内容,但希望它可以帮助您指明正确的方向。我还要仔细检查要加载的.json文件的路径。理想情况下,您也总是在处理错误案例。

答案 1 :(得分:0)

您是否可以将其添加到preload()功能中?像这样:

let config = {};
let songOne = 

function preload() {
    config = loadJSON("data/config.json");
    let songOneUrl = config.songs[0].filename;
    songOne = loadSongFile(songOneUrl);
}

上面只是一个例子,语法可能不对(我不确定你是如何加载歌曲的)。但这个想法应该是一样的。

编辑:我刚看到乔治在我面前几秒钟回答了这个问题。我不理会他的话。