最近两个月开始学习做I wanna,无聊的时候喜欢查代码,终于在今晚解决了一个困扰了我很久的问题——kid跳跃的高度问题。
通常情况下,I wanna引擎中kid的数据为
jump=8.5(一段跳跃)
jump2=7(二段跳跃)
gravity=0.4(重力加速度)
由以上数据再结合物理知识v^2=2gh算得的二次跳跃可以达到的最大高度是151.5625,而在实际游戏中kid连4.5格都很难跳上去(4.5*32=144)。这种算法显然是不对的。
于是考虑到游戏是按帧进行计算的,才恍然大悟。
一段跳初始(第一帧)速度是8.5-0.4=8.1(这是由于对于kid而言gravity是一个常量,一直存在,所以每一帧向上的速度都要减去0.4,向下的速度则要加上0.4),以后每一帧速度都会减少gravity的值0.4,因此可以构成一个等差数列,当速度减少到0.1之后下一帧就会变成反向的速度,因此末速度是0.1。根据等差数列前n项和(此处为21项)计算公式(8.1+0.1)*21/2=86.1,同理二段跳跃初速度是7-0.4=6.6,末速度是0.2,帧数为17,二段跳跃最大高度是(6.6+0.2)*17/2=57.8
以上相加86.1+57.8=143.9恰好不足144。至于不使用BH大法能不能征服4.5格高度我也不是很清楚(虽然个人没有成功过),因此无法断言这里的143.9能不能四舍五入。
通常情况下,I wanna引擎中kid的数据为
jump=8.5(一段跳跃)
jump2=7(二段跳跃)
gravity=0.4(重力加速度)
由以上数据再结合物理知识v^2=2gh算得的二次跳跃可以达到的最大高度是151.5625,而在实际游戏中kid连4.5格都很难跳上去(4.5*32=144)。这种算法显然是不对的。
于是考虑到游戏是按帧进行计算的,才恍然大悟。
一段跳初始(第一帧)速度是8.5-0.4=8.1(这是由于对于kid而言gravity是一个常量,一直存在,所以每一帧向上的速度都要减去0.4,向下的速度则要加上0.4),以后每一帧速度都会减少gravity的值0.4,因此可以构成一个等差数列,当速度减少到0.1之后下一帧就会变成反向的速度,因此末速度是0.1。根据等差数列前n项和(此处为21项)计算公式(8.1+0.1)*21/2=86.1,同理二段跳跃初速度是7-0.4=6.6,末速度是0.2,帧数为17,二段跳跃最大高度是(6.6+0.2)*17/2=57.8
以上相加86.1+57.8=143.9恰好不足144。至于不使用BH大法能不能征服4.5格高度我也不是很清楚(虽然个人没有成功过),因此无法断言这里的143.9能不能四舍五入。