7

长话短说,我正在制作一个平台游戏。我还没到学过微积分的年纪,所以我不知道导数或积分,但我知道它们。理想的行为是当我的角色两侧有一个高于他站立的那个的块时,我的角色会自动跳跃;例如,楼梯。这样玩家就可以按住左/右爬楼梯,而不必再发送跳跃键。

问题在于我实现跳跃的方式。我决定采用马里奥风格,并允许玩家保持“跳跃”更长的时间以跳得更高。为此,我将一个“跳跃”变量添加到玩家的 Y 速度中。跳跃变量在按下“跳跃”键时增加到设定值,一旦松开“跳跃”键,跳跃变量会迅速减小,但只要按住“跳跃”键,跳跃变量减小的速度较慢,从而提供持续加速只要您按住“跳跃”,就会向上。这也使得一个漂亮的,流畅的跳跃,而不是视觉上不和谐的,突然的加速。

因此,为了考虑可变楼梯高度,我希望能够准确计算“跳跃”变量应该获得什么值才能准确地跳到楼梯的高度;最好不多也不少,不过稍微多一点也是允许的。这样,角色可以跳上陡峭或浅浅的楼梯,而不会显得奇怪或缓慢。

基本上有5个变量在起作用:

h -the height the character needs to jump to reach the stair top<br>
j -the jump acceleration variable<br>
v -the vertical velocity of the character<br>
p -the vertical position of the character<br>
d -initial vertical position of the player minus final position<br>

Each timestep:<br>
j -= 1.5;          //the jump variable's deceleration<br>
v -= j;            //the jump value's influence on vertical speed<br>
v *= 0.95;         //friction on the vertical speed<br>
v += 1;            //gravity<br>
p += v;            //add the vertical speed to the vertical position<br>

v-initial is known to be zero<br>
v-final is known to be zero<br>
p-initial is known<br>
p-final is known<br>
d is known to be p-initial minus p-final<br>
j-final is known to be zero<br>

j-initial is unknown<br>

考虑到所有这些事实,我怎样才能得出一个求解 j 的方程?

tl;博士我如何微积分?

非常感谢任何能够做到这一点并决定解决这个问题的人。

编辑:这是我在 Excel 中制作的示例图。 替代文字

我想要一个方程,它可以让我在给定 B 的期望值的情况下找到 A 的值。由于跳跃变量随着时间的推移而减小,因此位置值不仅仅是一个简单的抛物线。

4

3 回答 3

1

在大量使用 Excel 2010 及其 Seek Goal 函数后,我能够制作一个数值表,Excel 为我提供了一个近似的趋势线和方程,我对其进行了调整,直到它成功。方程为 j = 3.35 * h ^ 0.196,其中 j 是初始跳跃力,h 是跳跃所需的高度。谢谢你的帮助。

于 2010-12-23T05:17:05.650 回答
1

这里有两个困难。第一个是你实际上没有j -= 1.5,你有j = max(0, j - 1.5)。这给计算带来了一些麻烦。此外,您的摩擦项v *= 0.95使直接解决方案变得困难。

我建议为此使用查找表。您可以通过反复试验预先计算a每个可能的期​​望值(例如,对给您所需值的值进行二进制搜索)。将结果存储在表格中,并在游戏期间进行简单的表格查找。bab

于 2010-12-22T07:45:00.270 回答
1

如果我忽略摩擦项,并假设 j 在 v 达到零之前达到零,我经过一页计算后得到:

b = 1/(8*(deceleration^2)*gravity)*j0^4 - 1/(6*deceleration^2)*j0^3

对此的解决方案很长,但大约等于(对于 10 < b < 400):

j0 = (10*(deceleration^2)*gravity*b)^0.25
于 2010-12-22T17:14:03.293 回答