【发布时间】:2012-04-01 00:39:21
【问题描述】:
我正在制作一个 2d 横向卷轴,我这辈子都无法跳起来工作。这就是我左右移动的方式:
for(var i = 0; i < time; i++)
newVelocityX = (oldVelocityX + accelerationX) * frictionX;
然后更新我的玩家位置
positionX = oldPositionX + newVelocityX;
这很好用,变量“时间”只是我上次运行该函数以来的毫秒数。摩擦效果很好,我很高兴在 X 方向上一切都很好。这是我在 Y 方向上的:
for(var i = 0; i < time; i++) {
accelerationY += gravityAccelerationY;
newVelocityY = oldVelocityY + accelerationY;
}
物体由于重力而下落就好了。如果我在用户按下向上箭头时设置负加速度 Y,那么我什至可以让玩家跳跃,但在快速计算机上他们跳得非常高,而在旧计算机上他们跳得非常低。我不知道如何解决这个问题,我想我已经像我一样把它放在 foo 循环中来解决这个问题。
【问题讨论】:
-
听起来好像在旧计时器到期和新计时器开始之间有很长的间隔。当然,在速度较慢的计算机上,这样的间隔会更长。但这只是一个想法:如果无关紧要,请忽略。祝你好运。
-
我们能看到更多代码吗?比如主游戏循环?
标签: javascript math physics gravity