在 Chrome 中预加载多个 (798) 个音频文件
Preload multiple (798) audio files in Chrome
我正在制作游戏,我想加载 798 个声音文件,但只有 Chrome 有问题,Firefox 没问题。示例代码:https://jsfiddle.net/76zb42ag/,查看控制台(按F12)。
有时脚本只加载 100、500、700 个文件,有时没问题。如果我将文件数量减少到 ex。 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");
}
}
这不是真正的代码问题。这是一个普遍的架构问题。
不仅取决于样本的数量,还取决于样本的大小,您不太可能一次加载所有样本。即使可以,它也会 运行 非常糟糕,因为内存使用率很高,并且可能会在一定时间后使选项卡崩溃。
由于它是离线的,我想说你甚至可以完全不预加载它们,因为读取速度几乎是瞬时的。
如果您发现这不合适,或者您可能一次需要 5 个声音而且速度可能太慢,我认为您需要以一种可以确定哪些声音的方式构建您的游戏您将需要特定的游戏状态,然后加载它们(并删除对您不需要的那些的引用,以便它们可以被垃圾收集)。
出于同样的原因,这正是所有游戏在向您显示加载屏幕时所做的。
如果你想避免 "loading screens",你可以想出一种方法来了解即将发生的事情并提前加载它。
我正在制作游戏,我想加载 798 个声音文件,但只有 Chrome 有问题,Firefox 没问题。示例代码:https://jsfiddle.net/76zb42ag/,查看控制台(按F12)。
有时脚本只加载 100、500、700 个文件,有时没问题。如果我将文件数量减少到 ex。 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");
}
}
这不是真正的代码问题。这是一个普遍的架构问题。
不仅取决于样本的数量,还取决于样本的大小,您不太可能一次加载所有样本。即使可以,它也会 运行 非常糟糕,因为内存使用率很高,并且可能会在一定时间后使选项卡崩溃。
由于它是离线的,我想说你甚至可以完全不预加载它们,因为读取速度几乎是瞬时的。
如果您发现这不合适,或者您可能一次需要 5 个声音而且速度可能太慢,我认为您需要以一种可以确定哪些声音的方式构建您的游戏您将需要特定的游戏状态,然后加载它们(并删除对您不需要的那些的引用,以便它们可以被垃圾收集)。
出于同样的原因,这正是所有游戏在向您显示加载屏幕时所做的。
如果你想避免 "loading screens",你可以想出一种方法来了解即将发生的事情并提前加载它。