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.
I modified your logic slightly and separated the calculation of horizontal and vertical speed: