Estoy desarrollando un juego usando JavaScript y canvas
. A medida que el juego se carga, todas las imágenes que se utilizarán se almacenan en caché.Espere a que se cargue la imagen antes de continuar
Observando la línea de tiempo de los recursos, veo que el siguiente código desencadena una solicitud asincrónica:
var sprite = new Image();
sprite.src = "sprites/sheet1.png";
El motor sigue ejecutando, con el tiempo comienza a dibujar y jugar el nivel. Es posible que las imágenes que se cargan después de pintar el primer fotograma nunca aparezcan debido a la saturación (es decir, que no se "ensucien").
Así que prueba los siguientes grupos:
console.log("begin");
var sprite = new Image();
sprite.onload = function() { console.log('loaded!'); };
sprite.src = "sprites/sheet1.png";
console.log("end");
Las salidas de la consola resultantes en el orden en que se producen son:
begin
end
loaded!
Estoy buscando una manera similar a $.ajax
con async: false
para realizar la carga. No puedo entender cómo ... gracias de antemano por su ayuda! J.
Gracias por su respuesta. Me olvidé de mencionar, este código es parte de un nombre de función "loadSprite (nombre)" que está siendo llamado por un padre. Ese padre lo llama desde un bucle como "para cada sprite loadSprite (nombre)". Necesito poder interrumpir el procesamiento, haciendo que el método vuelva solo cuando se cargó la imagen. ¿Alguna idea? – Jem
No puede hacer esto sin congelar el navegador. Actualizaré mi respuesta para mostrar una (la) solución adecuada. – ThiefMaster
Hola, gracias, es muy interesante. ¡No sabía nada sobre ese objeto diferido! – Jem