Есть скрип не могу зациклить function draw чтобы она отрисовывала сгенерированный вариант вариант куба. Отрисовывается только первый вариант и функция встаёт, хотя i считает исправно var cvs = document.getElementById('canvas'); var ctx = cvs.getContext('2d'); var cubeY = new Image(); var cubeG = new Image(); var cubeB = new Image(); var cube1 = new Image(); // Позиция var xPos = 20; var yPos = 20; var grav = 5; var w = 120; var h = 120; cubeY.src = "CubeY.gif"; cubeG.src = "CubeG.gif"; cubeB.src = "CubeB.gif"; for (i=0; i<5; i++){ var Random = getRandom (1, 4); function getRandom (min, max){ return Math.floor(Math.random() * (max - min)) + min; } // генерирует число if (Random == 1) { cube = cubeY; console.log('Куб = CubeY',' / ','Random =', Random); } if (Random == 2) { cube = cubeG; console.log('Куб = CubeG',' / ','Random =', Random); } if (Random == 3) { cube = cubeB; console.log('Куб = CubeB',' / ','Random =', Random); } function draw(){ ctx.clearRect(0, 0, cvs.width, cvs.height); // очищает от предидущего Image ctx.drawImage(cube, xPos, yPos, w, h ); // x,y,w,h рисует обект yPos += grav; //yPos = yPos > cvs.height? 20 : yPos + grav; // зацикливает requestAnimationFrame(draw); } cube.onload = draw; i++ console.log(i); }
Не говнокодте молодой человек. Код (Javascript): window.onload = function() { createCanvas(); }; function getRandom (min, max){ return Math.floor(Math.random() * (max - min)) + min; } // генерирует число function draw(){ var cvs = document.getElementById('canvas'); var ctx = cvs.getContext('2d'); var xPos = 20; var yPos = 20; var grav = 5; var w = 120; var h = 120; ctx.clearRect(0, 0, cvs.width, cvs.height); // очищает от предидущего Image ctx.drawImage(cube, xPos, yPos, w, h ); // x,y,w,h рисует обект yPos += grav; //yPos = yPos > cvs.height? 20 : yPos + grav; // зацикливает requestAnimationFrame(draw); } function createCanvas(){ var cubeY = new Image(); var cubeG = new Image(); var cubeB = new Image(); var cube1 = new Image(); cubeY.src = "CubeA.gif"; cubeG.src = "CubeG.gif"; cubeB.src = "CubeB.gif"; for (i=0; i<5; i++){ var Random = getRandom (1, 4); if (Random == 1) { cube = cubeY; console.log('Куб = CubeY',' / ','Random =', Random); } if (Random == 2) { cube = cubeG; console.log('Куб = CubeG',' / ','Random =', Random); } if (Random == 3) { cube = cubeB; console.log('Куб = CubeB',' / ','Random =', Random); } cube.onload = draw(); console.log(i); } }
а еще лучше: Код (Javascript): window.addEventListener('load', createCanvas); ибо ты вполне можешь захотеть повесить на это событие несколько обработчиков.
Я и говорю, при желании можно убавить код в 2 раза: Код (Javascript): $(window).on('load', createCanvas); Только зачем =)
И смысл ваших изменений, статично выводить рандомный куб и у меня вышло, проблема в том чтобы запустить requestAnimationFrame(draw); после getRandom . Сгенерировал , отрисовал , сгенерировал , отрисовал
В данном случае вы вырисовываете все кубы очень быстро и в конце отрисовывается последний. Вам нужны чтобы отрисовались все возможные кубы и еще и с промежутком какого то времени? Отрисовывается не первый вариант, а последний. Функция не встает, а выполняется полностью. И она перерисовывет ваш Код (Javascript): var cvs = document.getElementById('canvas'); Так что, все отрабатывает. Если вам нужны все кубики то нужно указать куда каждый рисовать. И с какой продолжительностью времени, если это важно конечно =) Вспоминается видео где заказчик просит нарисовать прямую линию в виде котенка)) --- Добавлено --- Не мог не вставить))