我想不出一个聪明的方法来获得重力。现在有了它,它会检测到角色结束的块,但它不会掉到那个块!
有没有更好的方法来做重力?我想在没有游戏库的情况下做到这一点。
我想不出一个聪明的方法来获得重力。现在有了它,它会检测到角色结束的块,但它不会掉到那个块!
有没有更好的方法来做重力?我想在没有游戏库的情况下做到这一点。
我不知道您所说的“获得重力”是什么意思;你的问题不清楚。我假设如果您可以检测到块何时结束,则可以使用以下公式:
s(t) = ut + 1/2at 2
s
time 处的距离是哪里t
,u
是初始速度(在您的情况下为零),并且a
是加速度(在地球上是 9.8m/s 2)。本质上,您将根据您当时获得的值调整对象的顶部位置t
(so original top position of object + s(t)
)。我想你会使用某种动画循环。也许一个setInterval
. 也许其他在 Javascript 动画方面有更多经验的人可以提出实现这一点的最佳方式。但是,这将是您用来确定对象在 time 的位置t
(如果它掉落)的公式。
基本上,平台游戏中的重力是这样的:
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