2017-11-30 19 views
0

게임을 만들고 있는데 798 개의 사운드 파일을로드하고 싶지만 Chrome, Firefox에만 문제가 있습니다. 샘플 코드 : https://jsfiddle.net/76zb42ag/, 콘솔 참조 (F12 키 누름).크롬에 여러 개의 오디오 파일 (798)을 미리로드하십시오.

때로는 스크립트가 100, 500, 700 파일 만로드하는 경우가 있습니다. ex. 파일 수를 줄이면. 300은 괜찮습니다 (항상). 이 문제를 어떻게 해결할 수 있습니까? 콜백이나 아이디어가 필요해? 게임은 오프라인 상태가됩니다 (노드 웹킷).

자바 스크립트 코드 :

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