首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >微积分?在给定一些其他变量的情况下,需要帮助解决依赖时间的变量

微积分?在给定一些其他变量的情况下,需要帮助解决依赖时间的变量
EN

Stack Overflow用户
提问于 2010-12-21 14:30:49
回答 3查看 344关注 0票数 7

长话短说,我正在做一个平台游戏。我还没到上过微积分的年龄,所以我不知道导数或积分,但我知道它们。我的角色需要的行为是,当他的两侧有一块积木在他所站的那块积木之上时,自动跳跃;例如,楼梯。这样,玩家就可以按住左/右爬楼梯,而不是必须同时按下跳跃键。

问题出在我实现跳跃的方式上;我决定采用马里奥风格,并允许玩家保持“跳跃”更长时间以跳得更高。为了做到这一点,我有一个‘跳’变量,它被添加到玩家的Y速度。当按下“跳转”键时,跳跃变量会增加到一个设定值,一旦松开“跳转”键,跳跃变量就会迅速减少,但只要你按住“跳跃”键,就不会那么快地减少,因此只要你按住“跳跃”键,就会提供连续的加速。这也使得一个漂亮的,流畅的跳跃,而不是视觉上刺耳的,突然的加速。

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

实际上有5个变量在起作用:

代码语言:javascript
复制
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的值。由于跳跃变量随着时间的推移而减少,因此位置值不只是一个简单的抛物线。

EN

回答 3

Stack Overflow用户

发布于 2010-12-22 15:45:00

这里有两个困难。第一个是你实际上没有j -= 1.5,你有j = max(0, j - 1.5)。这在某种程度上给计算带来了麻烦。另外,摩擦项v *= 0.95使得直接求解变得困难。

为此,我建议使用查找表。您可以通过反复试验为每个可能的a预先计算出所需的b (例如,对a的值进行二进制搜索,从而得到所需的b)。将结果存储在一个表中,在游戏过程中只需执行一个简单的表查找。

票数 1
EN

Stack Overflow用户

发布于 2010-12-23 01:14:03

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

代码语言:javascript
复制
b = 1/(8*(deceleration^2)*gravity)*j0^4 - 1/(6*deceleration^2)*j0^3

这个问题的解决方案相当长,但大约等于(对于10

代码语言:javascript
复制
j0 = (10*(deceleration^2)*gravity*b)^0.25
票数 1
EN

Stack Overflow用户

发布于 2010-12-23 13:17:06

在广泛使用Excel2010和它的Seek Goal函数后,我能够制作一个值表,Excel为我提供了一个近似的趋势线和方程式,我对其进行了调整,直到它计算出来。方程为j=3.35xh^0.196,其中j是初始跳跃力,h是跳跃所需的高度。谢谢你的帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4496794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档