views:

115

answers:

2

http://davzy.com/gameA/

I can't figure out a smart way to get gravity. Now with this it detects which block the character is over but it does't drop to that block!

Is there a better way to do gravity? I'd like to do this without a game library.

+2  A: 

I don't know what you mean by "get gravity"; your question is unclear. I assume that if you can detect when the block is over, you can use the following formula:

s(t) = ut + 1/2at2

Where s is the distance at time t, u is the initial velocity (which in your case would be zero), and a is the acceleration (on Earth this is 9.8m/s2). Essentially you would be adjusting the top position of your object based on the value you get at time t (so original top position of object + s(t)). I would imagine you would use some sort of animation loop. Perhaps a setInterval. Maybe others with more experience in Javascript animation can chime in about the best way to implement this. However, this would be the formula that you would be using to figure out where the object is at time t, if it falls.

Vivin Paliath
A: 

Basically gravity in a platformer goes like this:

var currentGrav = 0.0;
var gravAdd = 0.5; // add this every iteration of the game loop to currentGrav
var maxGrav = 4.0; // this caps currentGrav

var charPosY = getCharPosY(); // vertical position of the character, in this case the lower end
var colPosY = getColDow(); // some way to get the vertical position of the next "collision"

for(var i = 0; i < Math.abs(Math.ceil(currentGrav)); i++) { // make sure we have "full pixel" values
    if (charPosY == colPosY) {
       onGround = true;
       break; // we hit the ground
    }
    onGround = false;
    charPosY++;
}

Now to jump one could simply do this:

if (jumpKeyPressed && onGround) {
    currentGrav = -5.0; //
}

You can, if you want(and understand C), check out my game for a basic platformer(with moving platforms) here:
http://github.com/BonsaiDen/Norum/blob/master/sources/character.c

Ivo Wetzel