如何在Kineticjs中对曲线路径上的对象进行动画处理

时间:2014-03-01 15:56:41

标签: javascript animation canvas kineticjs curve

我想创建一条曲线,可能是四条曲线。它可以与http://www.html5canvastutorials.com/labs/html5-canvas-modify-curves-with-anchor-points-using-kineticjs/

类似地完成

然后我就能创建图像对象了。但是,我想沿着创建的路径设置动画(将其从曲线的起点移动到终点)。我可以使用Javascript + Canvas + KineticJS(v 4.7.1)。有什么办法,该怎么办?我找不到任何解决这个问题的例子。

1 个答案:

答案 0 :(得分:3)

演示:http://jsfiddle.net/m1erickson/nnU89/

enter image description here

您可以使用以下公式计算二次曲线上的点:

// Calc an XY along a quadratic curve at interval T
// T==0.00 at start of curve, T==1.00 at end of curve
function getQuadraticBezierXYatT(startPt,controlPt,endPt,T) {
    var x = Math.pow(1-T,2) * startPt.x + 2 * (1-T) * T * controlPt.x + Math.pow(T,2) * endPt.x; 
    var y = Math.pow(1-T,2) * startPt.y + 2 * (1-T) * T * controlPt.y + Math.pow(T,2) * endPt.y; 
    return( {x:x,y:y} );
}

你传入:

  • 曲线点(startPt,controlPt,endingPt)
  • 沿曲线的间隔,计算XY(T)
  • 注意:曲线开头T == 0,曲线末尾T == 1.00

然后你可以创建一个沿着曲线动画的Kinetic.Animation:

var animation = new Kinetic.Animation(function(frame) {

    // calc an XY along the curve at interval T

    var pos=getQuadraticBezierXYatT(qStart,qControl,qEnd,T/100);

    // set some Kinetic object to that position

    yourObject.setPosition(pos);    

    // change T for the next animation frame

    T+=TDirection;
    if(T<0 || T>100){ TDirection*=-1; T+=TDirection}

}, layer);