【问题标题】:Preload multiple (798) audio files in Chrome在 Chrome 中预加载多个 (798) 音频文件
【发布时间】:2018-05-14 07:39:57
【问题描述】:

我在做一个游戏,我想加载798个声音文件,但是只有Chrome有问题,火狐没问题。示例代码:https://jsfiddle.net/76zb42ag/,见控制台(按 F12)。

有时脚本只加载 100、500、700 个文件,有时很好。如果我将文件数量减少到前。 300 没问题(总是)。我怎么解决这个问题?我需要回调或任何想法?游戏将离线(node webkit)。

Javascript 代码:

var total = 0;
// sample file to download: http://www.sample-videos.com/audio/mp3/crowd-cheering.mp3
// sounds.length = 798 files 
var sounds = [

    (...limit character, see https://jsfiddle.net/76zb42ag/...)
];

for (var i in sounds) {
    load(sounds[i]);
}

function load(file) {
    var snd = new Audio();
    snd.addEventListener('canplaythrough', loadedAudio, false);
    snd.src = file;
}


function loadedAudio() {
    total++;
    console.log(total);
    if (total == sounds.length){
        console.log("COMPLETE");
    }
}

【问题讨论】:

    标签: javascript html google-chrome audio preload


    【解决方案1】:

    这并不是真正的代码问题。这是一个普遍的架构问题。

    不仅取决于样本的数量,还取决于样本的大小,您不太可能一次将它们全部加载。即使可以,由于内存使用量高,它也会运行得非常糟糕,并且可能会在一段时间后使选项卡崩溃。

    由于它处于离线状态,我想说你甚至可以完全不预加载它们,因为读取速度几乎是瞬时的。

    如果您发现这不合适,或者您可能一次需要大约 5 个并且可能太慢,我会说您需要以一种可以确定您的声音的方式来构建您的游戏'需要特定的游戏状态,然后加载它们(并删除对您不需要的那些的引用,以便它们可以被垃圾收集)。

    这正是所有游戏在向您显示加载屏幕时所做的事情,并且出于相同的原因。

    如果您想避免“加载屏幕”,您可以通过想出一种方法来了解即将发生的内容并提前加载它,从而变得聪明。

    【讨论】:

    • 听起来很伤心 ;)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-02
    • 1970-01-01
    相关资源
    最近更新 更多