gpt4 book ai didi

javascript - 游戏编程: remove movement lag (jumping)

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

我正在开发一个类似 HTML5 3D fps 的引擎,它看起来已经相当不错,但由于这可能是制作 3D 的最糟糕的语言选择之一,因此有时会出现明显的延迟。

我将运动 (WASD) 编程为独立于渲染速度,因此有时它非常不稳定,但其他时候则以可接受的 30+ fps 运行(当然取决于 CPU)。

唯一让我无法集中精力的是跳跃:目前跳跃是通过向下落变量添加一个正常数(重力始终为负,然后通过碰撞检测进行校正)然后减去一个常数来完成的,这就是每次渲染新帧时都会调用,问题是当 fps 变低时我感觉就像在月球上一样。与慢动作效果相比,我更喜欢抖动效果。

如果我使用与移动相同的方法(计算当前帧和最后一帧之间的时间),则扣除的变量有时会变得太大,并且跳跃顶点会发生变化(与高 fps 相比,变为该值的一半) - 这是 Not Acceptable 因为跳跃高度必须始终相同。

这里有一些伪代码可以帮助理解问题(在一个渲染例程中调用):

// when clicked on spacebar:
if(spacebar)
{
// this defines jumping apex
jump = 0.5
}

// constant added to y (vertical position) later in the code
cy += jump;

// terminal velocity = -2
if(jump > -2)
{
// gravity (apex multiple to get maximum height)
jump -= 0.05;
}

if(collision_with_floor)
{
// stop falling
cy = 0;

if(jump < 0)
{
jump = 0;
}
}

player.position.y += cy;

现在具有与时间相关的跳跃(替换上面的代码):

// terminal velocity = -2
if(jump > -2)
{
// gravity, 0.4 is an arbitrary constant
jump -= (now - last_frame)*0.4;
last_frame = now;
}

为了更好地说明,下面是正在发生的事情的图像:

enter image description here

蓝点表示帧渲染。

我什至不确定这是否是编写跳跃程序的正确方法。基本上,急躁和恒定的跳跃高度比平滑和慢动作效果更好。

最佳答案

如果帧更新太慢而无法获得准确的物理效果,那么也许您可以修改跳跃顶点,以便玩家始终击中它。这里的提示可能是当 y 速度从正变为负时。如果我正确地阅读了你的伪代码,那么它看起来像:

old_cy = cy;
cy += jump;
if(old_cy > 0 && cy <= 0)
player.position.y = jump_apex_height;

就您的图表而言,我们的想法是您想要识别到达橙色线的蓝点,然后将其提升到虚线。

现在我正在考虑这个问题,如果玩家真的每次都必须到达跳跃顶点,那么这甚至对于高速率更新也可能有所帮助.

关于javascript - 游戏编程: remove movement lag (jumping),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8472444/

26 4 0
文章推荐: jquery - 是否可以向模态窗口添加滚动条?
文章推荐: html - 在 float 子
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com