问候,用JavaScript,我试图做一个非常简单的动画,从一个X和Y协调的图像移动到另一个XY协调。 我有4个常量,例如:
var startX = 0; //starting X of an image
var startY = 0; //starting Y of an image
var endX = 100; //ending X of an image
var endY = 200; //ending Y of an image
//these 2 are used for keeping the "current" position of animated image,
var currentX = startX ;
var currentY = startY ;
//every 150 ms, updates the location of the coordinates
function move(){
if( (currentX == endX) && (currentY == endY) )
break;
if(currentX < endX){
currentX = currentX + step_amount;
}
if(currentX > endX){
currentX = currentX - step_amount;
}
if(currentY < endY){
currentY = currentY + step_amount;
}
if(currentY > endY){
currentY = currentY - step_amount;
}
setInterval("move()", 150);
}
这样做的工作,但它是不顺利的,我会很感激,如果你帮助我提高我天真算法更好的移动功能,就是始终要为“最短路径”。
两点之间的最短距离是一条直线。 所以,你应该沿着这可能会转移。
这也就意味着是在你的代码,你不应该使用相同的级差量为X和Y坐标。 代替计算基于X工序和最短路径线的斜率Y步进。
slope = (startY - endY) / (startX - endX);
Y_step = X_step * slope;
其次,在当前的算法,一旦你的图像到达目标点,它会继续振荡一下。 我想你应该摆脱那种采取消极的步骤语句。
因为你总是在移动两个坐标在一起,你只需要检查对他们中的一个,如
if (currentX < endX) {
currentX += xStep;
currentY += yStep;
}
尝试这样的事情来移动物体在一条直线:
var numberOfSteps = 100;
var stepDX = (endX - startX) / numberOfSteps;
var stepDY = (endY - startY) / numberOfSteps;
var step = 0;
里面的移动()函数:
if (step <= numberOfSteps) {
currentX = startX + stepDX * step;
currentY = startY + stepDY * step;
step++;
}
铸造currentX / currentY申请要移动对象之前为整数。
这是我的实现,非常感谢弗雷德里克傻瓜
计算斜率:
if(this.x === target.x){
this.slope = 1;
}else{
this.slope = (this.y - target.y)/(this.x - target.x);
}
Ystep:
if(this.y > this.target.y){
this.y = Math.max(this.target.y, this.y - Math.abs(this.slope * distance));
}else if(this.shape.y < this.target.y){
this.y = Math.min(this.target.y, this.y + Math.abs(this.slope * distance));
}