¿Cómo puedo poner una imagen en cada uno de los objetos?
actualmente solo muestra puntos, pero necesito mostrar la imagen
for (var i = 0; i < objects.length; i++) { var object = objects[i]; object.y += spawnRateOfDescent; ctx.beginPath(); ctx.arc(object.x, object.y, 8, 0, Math.PI * 2); ctx.closePath(); ctx.fillStyle = object.type; ctx.fill(); }Probé con esto
var img = new Image(); img.src = "img/HannyahNED/Cohete_1"+".png"; img.onload = function () { ctx.drawImage(img, object.x, object.y); };pero no funciono
La idea clave es que la carga de imágenes es asíncrona. El fragmento a continuación carga las imágenes primero (al crear una promesa que se resuelve cuando se completa image.onload ).
Después de eso, su código funciona bien.
const canvas = document.querySelector('canvas') const ctx = canvas.getContext('2d') const objects = [{ x: 10, y: 10, src: "https://via.placeholder.com/60/FF0000" // red image }, { x: 90, y: 90, src: "https://via.placeholder.com/60/00FF00" // green image }, { x: 170, y: 170, src: "https://via.placeholder.com/60/0000FF" // blue image } ] function fetchImage(url) { return new Promise(resolve => { const img = new Image(); img.src = url; img.onload = () => resolve(img); }); } const promises = objects.map(object => { return fetchImage(object.src).then(img => object.img = img) }); Promise.all(promises).then(() => { objects.forEach(object => { ctx.drawImage(object.img, object.x, object.y); ctx.beginPath(); ctx.arc(object.x, object.y, 8, 0, Math.PI * 2); ctx.closePath(); ctx.fill(); }); }) <div> <canvas width="400" height="400"></canvas> </div>