search

Home  >  Q&A  >  body text

What's wrong with dir variables and values?

window.onload = function() {
   var canvas = document.getElementById("canvas");
   var context = canvas.getContext("2d");
   var t = Date.now();
   var x = 0;
   var y = 0;
   var dir = 1;
   var speed =  150 + Math.round(Math.random()*(75));
   
   x =+ 10;
  function draw() {
  
     var timePassed = (Date.now() - t) /1000;
         t = Date.now()
     context.clearRect(0, 0, 600, 600)
     
      context.beginPath();
      context.rect(x, y, 100, 60)
      context.fillStyle = "white"
      context.fill();
    
   if (y <= 0) {
     dir = 2;
   }
   if (x <= 0) {
     dir = 1;
   }
    if (x>= 600-100) {
      dir= 2;
    }
    
    if (y >= 600-60) {
     dir = 3;
     }
    if  ((y >= 270 && y<= 300) && x >= 500) {
      dir = Math.round(Math.random()*4);
    }
     if ((x >= 250 && x <= 350) && y >= 540) {
       dir = Math.round(Math.random()*4);
     }
     if ((x >= 250 && x<=350) && y <= 0) {
       dir =Math.round(Math.random()*4);
     }
      if ( x >= 600-100 && y >= 300) {
     dir = Math.round(Math.random()*4);
   }
   if (x <= 0 && y>300) {
     dir = Math.round(Math.random()*4);
   }
   if (x >= 600-100 && y <= 300-60) {
     dir = Math.round(Math.random()*4);
   }
   if (x <= 0 && y <= 300-60) {
     dir = Math.round(Math.random()*4);
   }
   if (y <= 0 && x <= 300-100) {
     dir = Math.round(Math.random()*4);
   }
   if (y <= 0 && x >= 300) {
     dir = Math.round(Math.random()*4);
   }
   if (y >= 600-60 && x<=300-100) {
     dir = Math.round(Math.random()*4);
   }
   if (y >= 600-60 && x>=300) {
     dir = Math.round(Math.random()*4);
   }
      
      if (dir == 1) {
        x += speed*timePassed;
        y += speed*timePassed;
      }
      else if (dir == 2) {
        x -= speed*timePassed;
        y += speed*timePassed;
      }
      else if (dir == 3) {
        x -= speed*timePassed;
        y -= speed*timePassed;
      }
      else if (dir == 4) {
        x += speed*timePassed;
        y -= speed*timePassed;
      }
       
       
   if (speed > 225) {
        speed = 150 + (Math.round(Math.random()*75)); 
       }
     
    window.requestAnimationFrame(draw);
     }
     draw();
}

I just wrote my first code to try and make a DVD screensaver animation or something, but for some reason my code keeps glitching in the corners; Can you help me solve it? Please don't judge because this is my first code and if you can fix it by changing the values ​​and content and actually use the same logic, I'm using it there.

P粉204079743P粉204079743281 days ago394

reply all(1)I'll reply

  • P粉781235689

    P粉7812356892024-02-22 00:09:59

    I modified your logic slightly and separated the calculation of horizontal and vertical speed:

    function rnd(n){return Math.ceil(Math.random()*n)}
    var canvas = document.getElementById("canvas");
    var context = canvas.getContext("2d");
    var t = Date.now();
    const w=600,h=600;
    var x = 10;
    var y = 10;
    var xspeed=150+rnd(75), yspeed=150+rnd(75);
    function draw() { 
      var timePassed = (Date.now() - t) /1000;
      t = Date.now()
      context.clearRect(0, 0, w, h)
     
      context.beginPath();
      context.rect(x, y, 100, 60)
      context.fillStyle = "red"
      context.fill();
    
      if (y<=0 || y >= h-60) yspeed=-yspeed;
      if (x<=0 || x>= w-100) xspeed=-xspeed;
      x += xspeed*timePassed;
      y += yspeed*timePassed;
     
      window.requestAnimationFrame(draw);
    }
    draw();

    reply
    0
  • Cancelreply