帮助我提高我的基本的点对点移动的动画算法(help me improve my basic poin

2019-10-16 16:59发布

问候,用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);
}

这样做的工作,但它是不顺利的,我会很感激,如果你帮助我提高我天真算法更好的移动功能,就是始终要为“最短路径”。

Answer 1:

听起来像是你需要(的变化)的布氏画线算法。



Answer 2:

两点之间的最短距离是一条直线。 所以,你应该沿着这可能会转移。

这也就意味着是在你的代码,你不应该使用相同的级差量为X和Y坐标。 代替计算基于X工序和最短路径线的斜率Y步进。

slope = (startY - endY) / (startX - endX);
Y_step = X_step * slope;

其次,在当前的算法,一旦你的图像到达目标点,它会继续振荡一下。 我想你应该摆脱那种采取消极的步骤语句。



Answer 3:

因为你总是在移动两个坐标在一起,你只需要检查对他们中的一个,如

if (currentX < endX) {
    currentX += xStep;
    currentY += yStep;
}


Answer 4:

尝试这样的事情来移动物体在一条直线:

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申请要移动对象之前为整数。



Answer 5:

这是我的实现,非常感谢弗雷德里克傻瓜

计算斜率:

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));
}


文章来源: help me improve my basic point to point move animation algorithm