Você precisa do gerenciador de recursos para jogos HTML5?

7

Geralmente, o gerenciador de recursos é necessário para jogos de mesa / móveis. Mas é necessário para jogos HTML5 (navegador)?

A principal responsabilidade do gerente de recursos é garantir que não haja um clone de um recurso na memória. Mas no navegador, quando você solicita algo, a solicitação geralmente é armazenada em cache. Portanto, quando você faz outra solicitação para o mesmo recurso, o recurso não é mais carregado. Você entende imediatamente. (CMIIW).

Então, você precisa do gerenciador de recursos para os jogos do navegador html5?

Obrigado.

eckyputrady
fonte

Respostas:

6

A menos que você vá além do que pode ser razoavelmente armazenado na memória, não precisa de um gerenciador de recursos avançado. Isso também é válido para jogos de mesa, a maioria dos jogos "pequenos" se limita a carregar tudo na memória no lançamento e, quando necessário, está lá.

Em HTML e JavaScript, você não tem controle direto dos recursos da mesma maneira, o navegador possui um gerenciador de recursos interno que trabalha para você. No entanto, pode ser uma boa idéia ajudá-lo um pouco, a fim de conseguir que todas as imagens sejam carregadas na inicialização e impedir que elas sejam descarregadas quando não estiverem em uso.

Para esse fim, você pode criar vários elementos de imagem e anexar as imagens necessárias a eles, isso fará com que as imagens sejam carregadas e permaneçam na memória. Você nem precisa anexá-los ao documento, eles podem simplesmente existir como entidades virtuais no seu script.

Aqui está a parte de carregamento de um jogo que escrevi. Carrega 27 imagens da maneira descrita, verifica continuamente se todas estão carregadas junto com o corpo do documento, exibe um contador para o usuário informando até que ponto o carregamento progrediu e finalmente chama uma função para renderizar o menu quando todos os ativos estão carregado.

<body onload="bodyloaded=1">
<div id='maindivid'>
<p id='loadtext' style='text-align:center;'>
Loading 0/28
</p>
</div>
<script type="text/javascript">
bodyloaded=0
prlimg=new Array
for(a=0;3>a;a++){
prlimg[a]=new Array
for(b=0;3>b;b++){
prlimg[a][b]=new Array
for(c=0;3>c;c++){
    prlimg[a][b][c] = new Image
    prlimg[a][b][c].src = a+(b+(c+".png"))
}
}
}
function updateload(){
    elementsloaded=bodyloaded
    for(a=0;3>a;a++){
    for(b=0;3>b;b++){
    for(c=0;3>c;c++){
        elementsloaded+=prlimg[a][b][c].complete
    }
    }
    }
    document.getElementById('loadtext').innerHTML="Loading "+elementsloaded+"/28"
    if(elementsloaded==28){menu()}
    else{setTimeout("updateload()",100)}
}
updateload()
</script>
//Further code goes here
</body>

Veja o código em ação .

Quando olho para ele novamente, há algumas coisas que eu poderia ter feito de maneira diferente, mas deve bastar para demonstrar a funcionalidade.

aaaaaaaaaaaa
fonte
Obrigado, acontece que eu preciso de um gerenciador de recursos de qualquer maneira. Além de fazer como você fez, meus recursos precisam de alguma inicialização antes de estarem prontos para uso. Por exemplo, shaders em webgl. Se os recursos precisarem de inicialização, não podemos apenas confiar no navegador.
precisa saber é o seguinte