我正在做一个2d侧滚轮,为了我的生活,我不能跳到工作上。这就是我向左右移动的方式:
for(var i = 0; i < time; i++)
newVelocityX = (oldVelocityX + accelerationX) * frictionX;然后更新我的球员位置
positionX = oldPositionX + newVelocityX;
这很好用,而且变量"time“的ms数量与我上次运行函数时一样多。摩擦作用很大,我很高兴它在X方向上都很好。这就是我在Y方向上所看到的:
for(var i = 0; i < time; i++) {
accelerationY += gravityAccelerationY;
newVelocityY = oldVelocityY + accelerationY;
}由于重力的原因,物体坠落得很好。如果我在用户点击向上箭头时设置一个负accelerationY,那么我甚至可以让玩家跳起来,但是在快速计算机上他们跳得非常高,而在旧计算机上跳得非常低。我不知道如何解决这个问题,我以为我已经把它放在foor循环中了,就像我做的那样。
发布于 2012-04-01 01:20:38
您需要做几件事才能更改代码才能正常工作。在您发布的代码中有许多bug/性能命中。
这里有一些代码来做游戏的基础。
跳转的示例代码:
if (jump) {
velocityY = -jumpHeightSquared; // assuming positive Y is downward, and you are jumping upward
}
velocityY += gravityAccelerationY * time;
positionY += velocityY * time;
if (positionY > 0) {
positionY = 0; // assuming the ground is at height 0
velocityY = 0;
}用于横向移动的示例代码:
velocityX += accelerationX * time;
velocityX *= Math.pow(frictionX, time);
positionX += velocityX * time;对守则的一些评论:
速度和位置变量需要将它们的值保持在帧之间(我假设您已经知道了)。
gravityAccelerationY和frictionX是常数,除非重力或摩擦发生变化。
我用* time替换了for循环,使用一个乘法比一个循环更快。唯一的区别是在较低的帧速率,或高的加速率,那里的加速似乎是‘加速’从它应该是什么。不过,你不应该有问题的。
https://stackoverflow.com/questions/9960959
复制相似问题