HTML and CSS Reference
In-Depth Information
of control.) We then compare that distance value to the sum of the radius of each ball.
If the distance is less than or equal to the sum of the radii, we have a collision. This is
a very simple and efficient way to test collisions, and it works especially well with
collisions among balls in 2D:
function hitTestCircle(ball1,ball2) {
var retval = false;
var dx = ball1.nextx - ball2.nextx;
var dy = ball1.nexty - ball2.nexty;
var distance = (dx * dx + dy * dy);
if (distance <= (ball1.radius + ball2.radius) * (ball1.radius + ball2.radius) ) {
retval = true;
}
return retval;
}
Figure 5-9 illustrates this code.
Figure 5-9. Balls colliding
Separating the code in drawScreen()
The next thing we want to do is simplify drawScreen() by separating the code into
controllable functions. The idea here is that to test collisions correctly, we need to make
sure some of our calculations are done in a particular order. We like to call this an
update-collide-render cycle .
update()
Sets the nextx and nexty properties of all the balls in the balls array.
testWalls()
Tests to see whether the balls have hit one of the walls.
collide()
Tests collisions among balls. If the balls collide, updates nextx and nexty .
Search WWH ::




Custom Search