2017-11-30 4 views
0

私はゲームを作っていますが、798サウンドファイルをロードしたいのですが、Chrome、Firefoxにのみ問題があります。サンプルコード:https://jsfiddle.net/76zb42ag/、コンソールを参照してください(F12キーを押してください)。複数の(798)オーディオファイルをChromeにプリロードする

時々、スクリプトは100、500、700個のファイルしか読み込まないことがあります。私は元のファイルの数を減らす場合。 300は大丈夫です(いつも)。どうすればこの問題を解決できますか?私はコールバックやアイデアが必要ですか?ゲームはオフラインになります(ノードウェブキット)。

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"); 
    } 
} 

答えて

0

これは本当にコードの問題ではありません。これは一般的なアーキテクチャ上の問題です。

サンプル数だけでなく、サンプルのサイズにもよりますが、一度にすべてを読み込むことはできません。可能であれば、メモリ使用量が非常に少なく、一定時間が経過するとタブがクラッシュする可能性があるため、動作が非常に悪くなります。

オフラインなので、読み込み速度がほぼ瞬時になるため、あらかじめ読み込んでおくこともできないと言います。

これが適切でないことがわかったり、すぐに5のようにする必要があり、それが遅すぎる場合は、あなたがどの音を出すかを決定する方法でゲームを設計する必要があります特定のゲーム状態を必要とし、それらをロードします(ガベージコレクションのために不要なものへの参照を削除します)。

これはまったくゲームがあなたにローディング画面を表示したときと同じ理由からです。

「画面の読み込み」を避けたい場合は、何が起こっているのかを知り、直前に読み込む方法を工夫することで巧妙になることができます。

+0

それは悲しいです;)。 – User9213

関連する問題