长话短说,我正在制作平台游戏。我还不够大,已经拿走了微积分,所以我不知道衍生物或积分,但我知道它们。期望的行为是让我的角色在他身边的一个阻挡位于他所站立的位置之上时自动跳跃;例如,楼梯。通过这种方式,玩家可以向左/向右爬楼梯,而不必将跳转键垃圾邮件。
问题在于我实施跳跃的方式;我决定采用马里奥风格,让玩家更长时间地“跳跃”跳得更高。为此,我有一个“跳跃”变量,它被添加到玩家的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; dr我如何微积分?
非常感谢任何一位做到这一点的人,并决定解决这个问题。
编辑:这是我用Excel中的一个例子制作的图表。
我想要一个方程式,让我找到A的值,给定B的期望值。 由于跳跃变量随时间减小,位置值不仅仅是一个简单的抛物线。
答案 0 :(得分:1)
这里有两个困难。第一个是你实际上没有j -= 1.5
,你有j = max(0, j - 1.5)
。这有点像计算器。此外,您的摩擦术语v *= 0.95
使直接解决方案变得困难。
我建议使用查找表。您可以通过反复试验(例如,a
的二进制搜索,为您提供所需的b
),为每个可能的a
预先计算所需的b
。将结果存储在表格中,并在游戏过程中进行简单的表格查找。
答案 1 :(得分:1)
如果我忽略了摩擦项,并假设在v达到零之前j达到零,我得到一页计算结果:
b = 1/(8*(deceleration^2)*gravity)*j0^4 - 1/(6*deceleration^2)*j0^3
对此的解决方案很长,但大致相等(对于10
j0 = (10*(deceleration^2)*gravity*b)^0.25
答案 2 :(得分:1)
在大量使用Excel 2010及其Seek Goal功能之后,我能够制作一个值表,Excel给了我一个近似的趋势线和方程式,我一直在调整它。方程式为j = 3.35 * h ^ 0.196,其中j是初始跳跃力,h是跳跃所需的高度。谢谢你的帮助。