|
2d游戏里的跳跃.菜鸟的一点想法.请大家指教是否可行.或有更简单有效的方法.
假设:
跳跃高度上限为J.暂时设为9.(奇数.如果设为偶数.比如100的时候.上升和下降执行的次数不一样多.
或者改成FOR(int I=0;I<2J;I++)...)
人物当前高度为H.
人物上升和下降速度暂时不考虑.也不考虑地面或空中的障碍问题.
那么人物跳跃后就是一个高度从0到J再到0的过程.
是不是可以这样理解?
FOR(int I=0;I<=2J;I++) //I没啥实际意义.就是用来配合IF把跳跃的过程分成上升和下降两个阶段
{
IF (I<=J) //上升阶段.
{
H=I; //这时候.H=I= 0 TO 9.
}
ELSE //下降阶段.
{
H=2J-I; //H=2J-I.这时候I=10 TO 18,H= 18-10 TO 18-18也就是H=9 TO 0的阶段.
}
}
如果上面可行.那么再加上一个上升/下降的速度变量S.大致想法就是:
I = 0 TO 8的时候.S = 8 TO 1(上升阶段.也就是越高越慢.)
I = 9的时候H = 9,那么S = 0 (I=9的时候代表跳到最高点.这时候S=0也就是滞空.)
I = 10 TO 18的时候H = 9 TO 0,S = 1 TO 9(下降阶段,这时候是越来越快.)
------...脑子乱了...------
或者这么说.S(上升/下降的速度) = J(跳跃高度上限) - H(当前高度)
然后用S来控制在上升/下降过程的每帧人物图象高度移动的距离
或者这么表达:S(上升/下降是的速度)和H(当前高度)的关系:
H 0 -------> J -------> 0 //J同上,表示跳跃高度上限.
地面 -------> 最高点------->地面
S S -------> 0 -------> S //S表示一个速度,或者说是两帧之间人物图象在高度上的间隔距离大小.
快 -------> 慢 -------> 快
也就是说,跳跃还是分两个阶段.
1,上升(直到跳跃高度上限)阶段,H = 0 TO J,这时候的S = S > 0 TO S=0 的.S = 0 时代表滞空.
也就是上升是越来越慢直到滞空.
2,下降阶段,H = J-1 TO 0,这时候的S = (S = 0) TO (S > 0),也就是下降越来越快.
以上思路,是否可行或者有更简明高效的方法?
水平差.可能说得不是很明白.望大家多指教.有什么没说明白的地方也告诉我. |
|