Go back
9
If you noticed in the previously example, when a rectangle reached an edge of the screen, you would see an akward teleport effect.

We changed that now: by accounting for the individual rectangle dimensions in our code, we make the rectangles appear exactly behind the edge of the screen, giving it a seamless effect.
<canvas id="canvas" width=300 height=300 style="border: 1px solid black; background: #EEEEEE"></canvas>

<script>

	let canvas = document.getElementById('canvas')
	let ctx = canvas.getContext('2d')

	function drawRect(rect) {
		ctx.fillStyle = rect.color
		ctx.fillRect(rect.x, rect.y, rect.width, rect.height)
	}
	
	function updateRect(rect) {
		rect.x += rect.xspeed
		rect.y += rect.yspeed
		
		//we adjusted our conditions and expressions to make the transition from one corner to another seamless
		if (rect.x > canvas.width)
			rect.x = -rect.width
		if (rect.y > canvas.height)
			rect.y = -rect.height
			
		if (rect.x < -rect.width)
			rect.x = canvas.width
		if (rect.y < -rect.height)
			rect.y = canvas.height
	}
	
	let rect1 = { x: 0, y: 0, width: 32, height: 32, color: "blue", xspeed: 0.4, yspeed: 0.1 }
	let rect2 = { x: 0, y: 0, width: 20, height: 20, color: "green", xspeed: -0.2, yspeed: 0.05 }
	let rect3 = { x: 0, y: 0, width: 40, height: 40, color: "orange", xspeed: 0.5, yspeed: -0.1 }
	
	function update() {
		ctx.clearRect(0, 0, canvas.width, canvas.height)
		
		updateRect(rect1)
		updateRect(rect2)
		updateRect(rect3)
		
		drawRect(rect1)
		drawRect(rect2)
		drawRect(rect3)
	}
	
	setInterval(update, 4)


</script>