gpt4 book ai didi

javascript - 在游戏中跳跃

转载 作者:行者123 更新时间:2023-11-29 10:21:55 26 4
gpt4 key购买 nike

我正在制作一个 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,那么我什至可以让玩家跳跃,但是在一台快速的计算机上他们跳得很高,而在一台旧计算机上他们跳得很低。我不确定如何解决这个问题,我想我已经像以前一样通过将它放在 foor 循环中来解决这个问题。

最佳答案

您需要做几件事来更改您的代码才能正常工作。您发布的代码中存在许多错误/性能问题。

这里是一些代码来做游戏的基础。

跳跃的示例代码:

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 循环,使用单个乘法比循环更快。唯一的区别是在低帧速率或高加速度下,加速度似乎比应有的“加速”。不过,您不应该对此有任何问题。

关于javascript - 在游戏中跳跃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9960959/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com