HTML5 Game - Adding Gravity with Bounce and Applying Simple Elasticity

Introduction

The elasticity of a bouncing ball refers to how much energy is conserved when a ball bounces off a surface.

To simulate simple elasticity we can apply a constant value to the ball when it bounces off the ground.

Demo

ResultView the demo in separate window

<!doctype html>
<html lang="en">
<head>
<script type="text/javascript">
window.addEventListener('load', eventWindowLoaded, false);  
function eventWindowLoaded() {/*  w  w w  .j  a v  a  2s  .  c om*/
  canvasApp();

}
function canvasApp() {
  function  drawScreen () {
    
    context.fillStyle = '#EEEEEE';
    context.fillRect(0, 0, theCanvas.width, theCanvas.height);
    //Box
    context.strokeStyle = '#000000'; 
    context.strokeRect(1,  1, theCanvas.width-2, theCanvas.height-2);
    
       ball.velocityy += gravity;
    
    if ((ball.y + ball.radius) > theCanvas.height) {
      ball.velocityy = -(ball.velocityy)*ball.elasticity;
    }
    ball.y += ball.velocityy;
    ball.x += ball.velocityx;
    
    context.fillStyle = "#000000";
    context.beginPath();
    context.arc(ball.x,ball.y,ball.radius,0,Math.PI*2,true);
    context.closePath();
    context.fill();
        
  }
  let speed = 6;
  let gravity = .1;
  let elasticity = .5;
  let angle = 285;
  let radians = angle * Math.PI/ 180;
  let radius = 15;
  
  let vx = Math.cos(radians) * speed;
  let vy = Math.sin(radians) * speed;
  
  theCanvas = document.getElementById('canvasOne');
  context = theCanvas.getContext('2d');
  
  let p1 = {x:20,y:theCanvas.height-radius};
  let ball = {x:p1.x, y:p1.y, velocityx: vx, velocityy:vy, radius:radius, elasticity: elasticity};
  
  function gameLoop() {
      window.setTimeout(gameLoop, 20);
      drawScreen()  
    }
    
  gameLoop();
  
  
}

</script>

</head>
<body> 
<div style="position: absolute; top: 50px; left: 50px;">

<canvas id="canvasOne" width="500" height="500">
 Your browser does not support the HTML 5 Canvas. 
</canvas>
</div>

</body>
</html>

Related Topic