За последние 24 часа нас посетили 20649 программистов и 1706 роботов. Сейчас ищут 1595 программистов ...

Выручайте, всю голову сломал

Тема в разделе "JavaScript и AJAX", создана пользователем may123, 7 авг 2018.

  1. may123

    may123 Новичок

    С нами с:
    7 авг 2018
    Сообщения:
    4
    Симпатии:
    0
    Есть скрип не могу зациклить 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);
    }
     
  2. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    Не говнокодте молодой человек.

    Код (Javascript):
    1. window.onload = function() {
    2.    createCanvas();
    3. };
    4.  
    5. function getRandom (min, max){
    6.     return Math.floor(Math.random() * (max - min)) + min;
    7. } // генерирует число
    8.  
    9. function draw(){
    10.     var cvs = document.getElementById('canvas');
    11.     var ctx = cvs.getContext('2d');
    12.     var xPos = 20;
    13.     var yPos = 20;
    14.     var grav = 5;
    15.     var w = 120;
    16.     var h = 120;
    17.     ctx.clearRect(0, 0, cvs.width, cvs.height); // очищает от предидущего Image
    18.     ctx.drawImage(cube, xPos, yPos, w, h ); // x,y,w,h рисует обект
    19.     yPos += grav;
    20.     //yPos = yPos > cvs.height? 20 : yPos + grav; // зацикливает
    21.     requestAnimationFrame(draw);
    22. }
    23.  
    24. function createCanvas(){
    25.     var cubeY = new Image();
    26.     var cubeG = new Image();
    27.     var cubeB = new Image();
    28.     var cube1 = new Image();
    29.  
    30.     cubeY.src = "CubeA.gif";
    31.     cubeG.src = "CubeG.gif";
    32.     cubeB.src = "CubeB.gif";
    33.  
    34.     for (i=0; i<5; i++){
    35.         var Random = getRandom (1, 4);
    36.         if (Random == 1) { cube = cubeY; console.log('Куб = CubeY',' / ','Random =', Random); }
    37.         if (Random == 2) { cube = cubeG; console.log('Куб = CubeG',' / ','Random =', Random); }
    38.         if (Random == 3) { cube = cubeB; console.log('Куб = CubeB',' / ','Random =', Random); }
    39.         cube.onload = draw();
    40.         console.log(i);
    41.     }
    42. }
     
  3. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    Код (Javascript):
    1. window.onload = createCanvas; // :)
     
  4. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    Да там пол кода так сократить можно =)
     
  5. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    а еще лучше:
    Код (Javascript):
    1. window.addEventListener('load', createCanvas);
    ибо ты вполне можешь захотеть повесить на это событие несколько обработчиков.
     
  6. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    Я и говорю, при желании можно убавить код в 2 раза:
    Код (Javascript):
    1. $(window).on('load',  createCanvas);
    Только зачем =)
     
  7. may123

    may123 Новичок

    С нами с:
    7 авг 2018
    Сообщения:
    4
    Симпатии:
    0
    спасибо я только недавно занялся js
    --- Добавлено ---
    вы код проверяли он не рабочий
     
  8. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    У меня все работает=) Какую ошибку пишет у вас?
     
  9. may123

    may123 Новичок

    С нами с:
    7 авг 2018
    Сообщения:
    4
    Симпатии:
    0
  10. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    CubeY.gif у вас было, измените) или переименуйте ваш фаил.
     
  11. may123

    may123 Новичок

    С нами с:
    7 авг 2018
    Сообщения:
    4
    Симпатии:
    0
    И смысл ваших изменений, статично выводить рандомный куб и у меня вышло, проблема в том чтобы запустить requestAnimationFrame(draw); после getRandom . Сгенерировал , отрисовал , сгенерировал , отрисовал
     
  12. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    В данном случае вы вырисовываете все кубы очень быстро и в конце отрисовывается последний.
    Вам нужны чтобы отрисовались все возможные кубы и еще и с промежутком какого то времени?
    Отрисовывается не первый вариант, а последний. Функция не встает, а выполняется полностью.
    И она перерисовывет ваш
    Код (Javascript):
    1. var cvs = document.getElementById('canvas');
    Так что, все отрабатывает. Если вам нужны все кубики то нужно указать куда каждый рисовать. И с какой продолжительностью времени, если это важно конечно =) Вспоминается видео где заказчик просит нарисовать прямую линию в виде котенка))
    --- Добавлено ---
    Не мог не вставить))