问题描述:
有两个物体A和B,A移动S1的距离到达终点,B移动S2的距离到达终点,两者同时到达各自终点(S1 != S2),
并且所花的时间都是T
现在我想通过改变物体的left值,让它们同时到达各自的终点,
通过计算得出A物体单位时间内移动5.6px,B物体移动1px可以同时到达终点,但是
left属性值不能正确表示小数,只能显示整数。所以累加后得到的数值有偏差,导致两个物体不是同时到达终点的
请问怎么处理这样的问题,让两者看起来同时到达各自终点呢?
将速度分成2段,比如50距离要30秒走完,前10秒速度1/s,后20秒速度2/s,这样就不会有不整除的问题了,两个物体就能同时到达:
V=parseInt(S/T)
M=S%T
if(t>T-M){
V++;
}
这样看起来就不是很匀速了
@没有加班费:
影响应该不大,后面只快一个像素可能也感觉不到
@没有加班费:
上面写错了
移动....
if(t==T-M){
V++;
}
@向往-SONG: 我用一个按钮来控制,如果按下物体移动,释放则物体停止,这样分段来控制不是很方便吧?
@没有加班费:
封装好一个移动的方法,怎么控制都没区别啊。
分段速度实质是将你除整余下的距离平均分配到各个时间段里
你设置下移动时间。
已经设置T为移动时间,是个常量
@没有加班费: 延迟 b移动
@┢┦偉: 这两个物体是要同时移动的,不能出现有一个物体在动而另一个不动的情况
@没有加班费: 你可以让他延迟慢点 那样也不是很明显啊
@┢┦偉: 但是两者最后是要同时到达终点啊
@没有加班费: 你设置一下延迟看看啊 一个快一个慢最后肯定能同时到的
@┢┦偉: 我是通过按下一个按钮来控制两个物体移动的,鼠标按下按钮的时候,两个物体移动,抬起时动作停止,那么是要给onmousedown事件设置两个setTimeout?
假设A移动的时间为T1,B移动的时间为T2,他们不是常量。且两者都是平行直线运动的。那么T1=S1/5.6;T2=S2/1;这样两者时间就一样了,T1-T2就是A多移动的时间。“时间差*速度”不就吧距离算出来了。
当然如果不是平行直线运动,那么就要进行具体在X、Y方向的分解。
如果不是直线运动 那就没法了。
我是这样认为的
如果假设S1 = 1512,S2 = 396,速度分别为V1、V2,经过时间T后到达终点,那么应该有
S1 / V1 = S2 / V2,如果再假定物体B的速度V2为1的话,那么可以得出V1的值为3.81818181...
也就是说每当B移动1,A应该移动3.818181才能在T时间内同时到达,不知道3.8181这个浮点数怎么取值比较好,如果取4,那后面每次累加就多了,怎么确保计算精确呢?