Game Gravity

Multi tool use
Multi tool use






<!--
main_leaderboard, all: [728,90][970,90][320,50][468,60]
-->



Game Gravity



❮ Previous
Next ❯



Some games have forces that pulls the game component in one direction, like gravity pulls objects to the ground.










var myGameArea;
var myGamePiece;
var myoverlay;
var myresult;
var accel = false;

function startGame() {
myGameArea = new gamearea("canvascontainer");
//myresult = new component(myGameArea, "30px", "Consolas", "white", 30, 50, "text");
//myresult.text = "Land me Safely"
myGamePiece = new component(30, 30, "red", 50, 50);
//myoverlay = new component(myGameArea, 640, 360, "rgba(0,255,0,0.1)", 0, 0);
myGameArea.start();
}

function gamearea() {
this.canvas = document.createElement("canvas");
this.canvas.width = 320;
this.canvas.height = 180;
document.getElementById("canvascontainer").appendChild(this.canvas);
this.context = this.canvas.getContext("2d");
this.start = function() {
this.interval = setInterval(updateGameArea, 20);
}
this.stop = function() {
clearInterval(this.interval);
this.pause = true;
}
this.clear = function(){
this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);
}
}

function component(width, height, color, x, y, type) {

this.type = type;
if (type == "image") {
this.image = new Image();
this.image.src = color;
}
this.width = width;
this.height = height;
this.angle = 0;
this.moveangle = 0;
this.color = color;
this.rotation = 0;
this.speed = 0;
this.fallspeed = 0;
this.x = x;
this.y = y;
this.speedX = 0;
this.speedY = 0;
this.update = function() {
ctx = myGameArea.context;
ctx.save();
ctx.translate(this.x, this.y);
ctx.rotate(this.angle);
if (this.type == "text") {
ctx.font = this.width + " " + this.height;
ctx.fillStyle = color;
ctx.fillText(this.text, this.x, this.y);
} else {
ctx.fillStyle = this.color;
ctx.fillRect(-(this.width / 2), -(this.height / 2), this.width, this.height);
}
ctx.restore();
}
this.newGravityPos = function(degrees, thrust) {
degrees -= 90;
angle = degrees * Math.PI / 180;
this.speedX += thrust * Math.cos(angle);
this.speedY += thrust * Math.sin(angle);
this.calcSpeedAngle();
}
this.calcSpeedAngle = function(){
this.speed = Math.sqrt((this.speedX * this.speedX) + (this.speedY * this.speedY));
}
}

function updateGameArea() {
myGameArea.clear();
myGamePiece.x += myGamePiece.speedX;
myGamePiece.y += myGamePiece.speedY;
if (accel == true || (document.key && document.key == 38)) {
myGamePiece.newGravityPos(0, 0.2);
}
myGamePiece.newGravityPos(180, 0.05);
if (myGamePiece.speed > 2 || myGamePiece.y 165) {
myGameArea.stop();
if (myGamePiece.speed > 2) {
//myresult.width = "26px";
//myresult.x = 10;
//myresult.text = "Landing was to hard!";
//myoverlay.color = "rgba(255,0,0,0.1)"
} else {
//myoverlay.color = "rgba(0,255,0,0.1)"
//myresult.text = "Nice landing!";
}
}
if (myGamePiece.y < -15) {
myGameArea.stop();
//myresult.width = "18px";
//myresult.x = 4;
//myresult.text = "You lost the red square!";
}
//myresult.update();
}

function accelerate(x) {
accel = x;
}

function restartgame(x) {
myGameArea.stop();
document.getElementById("canvascontainer").innerHTML = "";
startGame();
}

startGame();


Gravity



To add this functionality to our component constructor, first add a gravity property, which sets the current gravity.
Then add a gravitySpeed property, which increases everytime we update the frame:




Example



function component(width, height, color, x, y, type) {
    this.type = type;
    this.width = width;
    this.height = height;
    this.x = x;
    this.y = y;
    this.speedX = 0;
    this.speedY = 0;
    this.gravity = 0.05;
    this.gravitySpeed = 0;
   
this.update = function() {
        ctx = myGameArea.context;
        ctx.fillStyle = color;
        ctx.fillRect(this.x, this.y, this.width, this.height);
    }
    this.newPos = function() {
        this.gravitySpeed += this.gravity;
        this.x += this.speedX;
        this.y += this.speedY + this.gravitySpeed;
    }
}

Try it Yourself »






<!--
mid_content, all: [300,250][336,280][728,90][970,250][970,90][320,50][468,60]
-->





Hit the Bottom


To prevent the red square from falling forever, stop the falling when it hits the bottom of the game area:




Example



    this.newPos = function() {
        this.gravitySpeed += this.gravity;
        this.x += this.speedX;
        this.y += this.speedY + this.gravitySpeed;
        this.hitBottom();
    }
    this.hitBottom = function() {
        var rockbottom = myGameArea.canvas.height - this.height;
        if (this.y > rockbottom) {
            this.y = rockbottom;
        }
    }


Try it Yourself »



Accelerate Up


In a game, when you have a force that pulls you down, you should have a method to force the component to accelerate up.


Trigger a function when someone clicks a button, and make the red square fly up in the air:




Example



<script>
function accelerate(n) {
    myGamePiece.gravity = n;
}
</script>

<button onmousedown="accelerate(-0.2)" onmouseup="accelerate(0.1)">ACCELERATE</button>

Try it Yourself »



A Game


Make a game based on what we have learned so far:




Example





Try it Yourself »




❮ Previous
Next ❯

MmrVz79Uit90U9VfW0S8VVcGjcn8vTrBOfYpM nCt
Jzv,AeUrN e,k7j,bGpjPYL,tq2xoXL XhPKE5cJmWkcTCmytWefpMKwaAPxA oyed9sDsDkCj mkzy1z 7,n CyX3lN,99 O5EvYbTlQ US

Popular posts from this blog

How to check contact read email or not when send email to Individual?

How many registers does an x86_64 CPU actually have?

Displaying single band from multi-band raster using QGIS