【问题标题】:Using p5.js, is it possible to preload some .json files that are defined in a .json file that is itself preloaded with the preload() function?使用 p5.js,是否可以预加载一些在 .json 文件中定义的 .json 文件,该文件本身已预加载了 preload() 函数?
【发布时间】:2018-02-13 01:36:11
【问题描述】:

我正在开发一个从 JSON 文件加载一些配置选项的 p5.js 项目。我正在 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 文件。

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

编辑:感谢乔治在下面的回答,我的工作如下。以下所有内容在进入 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);
}

【问题讨论】:

    标签: javascript json p5.js


    【解决方案1】:

    您应该能够加载 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 文件的路径。理想情况下,您也应该始终处理错误情况。

    【讨论】:

    • 谢谢,George - 你向我展示了如何以不同的方式思考它,我现在可以使用它了。我对我的问题进行了编辑,以展示我是如何做到的。
    • 没问题!很高兴看到你已经成功了。请记住,您正在为所有歌曲重新使用相同的回调。下一步可能是在加载歌曲时填充歌曲列表。祝你好运
    • 加载配置文件后,我将创建一个 Song 对象数组。每个Song 对象将文件名作为其构造函数的参数,并在数组创建循环期间预加载它自己的 JSON 文件:)
    【解决方案2】:

    你不能把它添加到preload() 函数中吗?像这样的:

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

    以上只是一个示例,语法可能不正确(我不确定您是如何加载歌曲的)。但是思路应该是一样的。

    编辑:我刚刚看到乔治比我早几秒钟回答了这个问题。我会接受他的话而不是我的话。

    【讨论】:

    • 我试图避免从preload() 显式预加载歌曲 JSON 文件,因为我使用的不同配置文件将包含可变数量的歌曲。理想情况下,我喜欢拥有一堆配置文件,只需将我需要的配置文件重命名为config.json,这样我就根本不需要接触 JavaScript。乔治的回答为我指明了正确的方向,我现在可以正常工作,但感谢您的回复。
    猜你喜欢
    • 2018-10-11
    • 1970-01-01
    • 1970-01-01
    • 2020-09-08
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    相关资源
    最近更新 更多