HTML 5 Canvas And Moving Objects
Solution 1:
Here's a brief description of how to move circles on html canvas:
A Demo: http://jsfiddle.net/m1erickson/JQQP9/
Create an object that defines each circle:
var circle1={
x:50,
y:50,
radius:25,
}
var circle2={
x:100,
y:100,
radius:25,
}
Add these circle objects to an array:
var circles=[];
circles.push(circle1);
circles.push(circle2);
Make a function that will draw all circles in the array.
This function clears the canvas and redraws all circles at their currently assigned x,y:
function draw(){
context.clearRect(0,0,canvas.width,canvas.height);
for(var i=0;i<circles.length;i++){
var c=circles[i];
context.beginPath();
context.arc(c.x,c.y,c.radius,0,Math.PI*2);
context.closePath();
context.fill();
}
}
To "move" the circles you change the x,y properties of a circle and redraw the circles:
circles[0].x+=1;
circles[1].y+=1;
draw();
To animate the movements, you might consider checking out requestAnimationFrame
which efficiently creates an animation loop. IMHO, it is the preferred looping method for all but simple animations.
var frameCount=0;
animate();
function animate(){
if(frameCount<160){requestAnimationFrame(animate);}
circles[0].x+=1;
circles[1].y+=1;
draw();
frameCount++;
}
Solution 2:
The usual way to do this would be to use window.requestAnimationFrame. This will essentially let you redraw the canvas every frame that the browser checks if it needs to redraw the screen. Below is my modification of your draw method and initialization code.
function draw() {
// schedule another draw for the next animation frame by calling
// requestAnimationFrame with itself as a callback
requestAnimationFrame(draw);
// clear the canvas (otherwise your circles will leave trails)
canvas.getContext("2d").clearRect(0, 0, canvas.width, canvas.height);
// calc a new position for the circles based on the current time
var now = +new Date();
var halfWidth = canvas.width / 2; // (waste to recheck each frame)
var maxX = canvas.width - radius; // to avoid drawing the circles off screen
var spaceBetween = canvas.width / 3;
var x1 = (halfWidth + now) % maxX;
var x2 = (x1 + spaceBetween) % maxX;
var x3 = (x2 + spaceBetween) % maxX;
var y = canvas.height / 2;
var spaceBetween = canvas.width / 3;
renderCircle(context, x1, y, radius, 'yellow');
renderCircle(context, x2, y, radius, 'blue');
renderCircle(context, x3, y, radius, 'red');
}
var canvas = document.getElementById('ball-canvas');
var context = canvas.getContext('2d')
var radius = 50;
// start the animation
draw();
Post a Comment for "HTML 5 Canvas And Moving Objects"