长话短说,我正在做一个平台游戏。我还没到上过微积分的年龄,所以我不知道导数或积分,但我知道它们。我的角色需要的行为是,当他的两侧有一块积木在他所站的那块积木之上时,自动跳跃;例如,楼梯。这样,玩家就可以按住左/右爬楼梯,而不是必须同时按下跳跃键。
问题出在我实现跳跃的方式上;我决定采用马里奥风格,并允许玩家保持“跳跃”更长时间以跳得更高。为了做到这一点,我有一个‘跳’变量,它被添加到玩家的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?
我该怎么做微积分?
非常感谢那些走到这一步并决定解决这个问题的人。
编辑:这是我用Excel做的一个例子的图表。

我想要一个方程,它可以让我在给定B的期望值的情况下找到A的值。由于跳跃变量随着时间的推移而减少,因此位置值不只是一个简单的抛物线。
发布于 2010-12-22 15:45:00
这里有两个困难。第一个是你实际上没有j -= 1.5,你有j = max(0, j - 1.5)。这在某种程度上给计算带来了麻烦。另外,摩擦项v *= 0.95使得直接求解变得困难。
为此,我建议使用查找表。您可以通过反复试验为每个可能的a预先计算出所需的b (例如,对a的值进行二进制搜索,从而得到所需的b)。将结果存储在一个表中,在游戏过程中只需执行一个简单的表查找。
发布于 2010-12-23 01:14:03
如果我忽略摩擦项,并假设在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发布于 2010-12-23 13:17:06
在广泛使用Excel2010和它的Seek Goal函数后,我能够制作一个值表,Excel为我提供了一个近似的趋势线和方程式,我对其进行了调整,直到它计算出来。方程为j=3.35xh^0.196,其中j是初始跳跃力,h是跳跃所需的高度。谢谢你的帮助。
https://stackoverflow.com/questions/4496794
复制相似问题