Saturday, September 26, 2015

Bouncing boxes.

By The Code Player


Click below

HTML

<canvas onclick='boxes(this)'></canvas>

 

CSS

canvas{
background:#000;
}

 

JavaScript

function boxes(obj){
window.onload = function()
{
// lets get the HTML canvas element so we draw on it
var canvas = obj;
var ctx = canvas.getContext("2d")

var W = window.innerWidth, // get the width of our window
H = window.innerHeight;// get the height

// set our canvas to our size of Width and height
canvas.width = W;
canvas.height = H;

/*=========== Box class ===========*/
function Box(_x,_y)
{
// the X/Y position
this.x = _x;
this.y = _y;

// lets give it velocity X and Y
this.xVel = 10 + Math.random()*20;
this.yVel = 1;

// the box width and height
this.width = 20
this.height = 20;

// random colors for our box
this.r = Math.round(Math.random()*255);
this.g = Math.round(Math.random()*255);
this.b = Math.round(Math.random()*255);

this.rgba = "rgba("+this.r+","+this.g+","+this.b+",1)";

// lets make draw method for our box
this.draw = function()
{
ctx.strokeStyle = this.rgba;
ctx.strokeRect(this.x,this.y,this.width,this.height);

this.update();
}

// function that handle our logics for our box
this.update = function()
{
// lets check if the ball get out of our screen and when
// it does that, make it bounce
// check the left window border
if(this.x < 0) {
this.x = 0; // set its position to 0
this.xVel *= -1; // make it bounce
}

// check the right border
if(this.x > W - this.width)
{
this.x = W - this.width; // set its position to 0
this.xVel *= -1; // make it bounce
}

// check the top border
if(this.y < 0) {
this.y = 0; // this is what happen when u copy/paste
this.yVel *= -1; // make it bounce
}

// the reason why we did this if function so the boxes dont
// try to add y by its velocity when its reach bottom
// cause it will cause it to spazz
// now we add gravity
if(this.y < H - this.height)
this.yVel += .25;

// check the bottom border
if(this.y > H - this.height)
{
// when it bounce off the bottom decrease the ball speed
this.xVel *= .5
this.yVel *= .5

this.y = H - this.height; // set its position to 0
this.yVel *= -1; // make it bounce
}

// move add speed to our x/y
this.x += this.xVel;
this.y += this.yVel;
}
}

// lets make array of boxes
var boxes = [];

// Function to draw stuff on our screen :)
function draw()
{
// Background
ctx.globalCompositeOperation = "source-over";
ctx.fillStyle = "rgba(0,0,0,0.5)"
ctx.fillRect(0,0,W,H);

ctx.globalCompositeOperation = "lighter"

// loop through the boxes and draw them
for(i=0; i < boxes.length; i++)
boxes[i].draw();

update();
}

// Function for our logic
function update()
{
// loop through the boxes and draw them
for(i=0; i < boxes.length; i++)
boxes[i].update();
}

// add box every minute we specify
setInterval(function(){
boxes.push( new Box(0,0))
},1000);

// set interval so we can draw then update our drawing
// every 30 milisecond
setInterval(draw,30);
}
}



No comments:

Post a Comment