假设步长为 step(pixel),步速为 speed(pixel/frame),人物行走动画帧数为 n(frame)。
现在要把人物从坐标 0 移动到 100。
我们可以算出,这个过程是需要 100/speed 帧来完成的。
那么第 i 帧画面,人物在的位置:
pos=i*100/speed
这个时候,需要画第几帧图象呢?
首先我们需要知道第 i 帧画面,也就是 pos 这个位置,人物已经走了t=|pos/step| 步 (t 取整了);
我们的小人正在走在第 t+1 步的 m=(pos-t*step) * 100% 时刻m 是一个 0~1 之间的数字。
f=|n*m| 就是我们在此时刻需要画的行走图片帧了。
加快行走速度,无非是加快了频率,不可能导致滑步的,因为一步迈出的距离根本不会变。
ps. 对于跑步、有腾空,轻微滑步是允许的,所以可以适当加大步长是允许的
————————————————
版权声明:本文为CSDN博主「pcmac」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/pcmac/article/details/308400
注:
步长为 step(px),人物行走动画帧数为 n(帧数(Frames))(完成一个步长所需要的帧数),步速为 speed(px/frame)(step/n)(每帧移动的像素)。
例;步长为 2(pixel),步速为 1/15(px/frame)(每帧移动15分之一px),人物行走动画帧数为 30(frame)。
现在要把人物从坐标 0 移动到 100。
我们可以算出,这个过程是需要 100/speed =1500帧来完成的
那么第 i (87)帧画面,人物在的位置:
pos=i*100/speed(他的公式我没看懂不知道是不是写错了)
pos=i*speed=87*1/15=87/15=5.8(px)
这个时候,需要画第几帧图象呢?(如果知道是当前总87帧,30帧一个循环,那此处就是|87/30|=取整2两个整循环,当前帧数就是87-30*2=27帧,,,貌似现在的假设是只知道位置,不知道多少帧)
首先我们需要知道第 87帧画面,也就是 pos(5.8(px)) 这个位置,人物已经走了t=|pos/step| 步 (t 取整了)(t=|5.8 /2|=(取整)2);
我们的小人正在走在第 t+1(3) 步的 ((pos-t*step) =(5.8-2*2)=1.8(px) 这1.8px是3步的1.8/2时刻=0.9*100%=90%) 时刻m 是一个 0~1 之间的数字。
f=|n*m|=|30*90%|=27(frame)就是我们在此时刻需要画的行走图片帧了(和上面知道总帧数得到的结果是一样的,算是相互验证)。
(如果问题请留言)
提示:这种公式用于操作每一个动画单帧的方法,但如果你的动画帧是确定的,30帧,(重点)而且动画帧的时间是设定好的(1s----1秒播放30帧以确定)那么速度这个动画的移动速度就固定了,或者说 30帧动画是一个整体,无法分割,就无法用上面的方法。简单说下:动画帧(30frame)确定,时间(1s)确定,步长(20px)应该也是确定的, 那么速度就是 =步长/时间,(v=s/t,v=20px/s),那么现在如果实现不滑步,,,播放动画和移动分开控制,,,动画调用频率设置为动画播放时间(1s)循环调用,这就使人物连贯原地走起来了,我们知道这个人物动画的速度是20px/s,那就在来一个控制器,控制动画整体,每20px/s的速度移动就可以了,,假设
移还是0-100,那么这个控制移动的频率我们可以设置为0.1s,位置距离等于速度*时间,s1=v*t1 时间每0.1进行累加(t=t+0.1)
当t1=0.1,当前的位置就是s1=20*0.1=2px;
t1=0.2,s1=0.4;
t1=0.3,s1=0.6
t1=1,s1=2;
所以时间等于播放帧时间,一秒后的位置也就是一个步长,s1=(v)*t1=(s/t)*t1=(20/1)*1=20px;
t1=1.2,s=2.4;
.....
具体的情况还要具体分析,这只是大方向,,,