http://davzy.com/gameA/

Я не могу придумать умный способ получить гравитацию. Теперь он определяет, в каком блоке персонаж закончился, но не попадает в этот блок!

Есть ли лучший способ сделать гравитацию? Я бы хотел сделать это без игровой библиотеки.

-2
David Zorychta 23 Июл 2010 в 20:15

2 ответа

Лучший ответ

В основном гравитация в платформере выглядит так:

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++;
}

Теперь, чтобы прыгнуть, можно просто сделать это:

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

Вы можете, если хотите (и понимаете C), посмотреть мою игру для базового платформера (с движущимися платформами) здесь:
http://github.com/BonsaiDen/Norum/blob/master/ sources / character.c

0
Ivo Wetzel 23 Июл 2010 в 20:34

Я не знаю, что вы подразумеваете под «получить гравитацию»; ваш вопрос непонятен. Я предполагаю, что если вы можете определить, когда блок закончился, вы можете использовать следующую формулу:

s (t) = ut + 1/2 при 2

Где s - расстояние в момент времени t, u - начальная скорость (которая в вашем случае будет равна нулю), а a - ускорение (на Земле это 9,8 м / с 2 ). По сути, вы должны регулировать верхнюю позицию вашего объекта на основе значения, которое вы получаете в момент времени t (так что original top position of object + s(t)). Я бы предположил, что вы использовали бы какой-то цикл анимации. Возможно, setInterval. Возможно, кто-то другой, обладающий большим опытом в анимации Javascript, подскажет, как это лучше всего реализовать. Однако это будет формула, которую вы использовали бы, чтобы выяснить, где находится объект в момент времени t, если он упадет.

2
Vivin Paliath 23 Июл 2010 в 16:25