【问题标题】:How to animate object on curve path in Kineticjs如何在 Kineticjs 中的曲线路径上为对象设置动画
【发布时间】:2014-03-01 15:56:40
【问题描述】:

我想创建一条曲线作为路径,可能是四边形曲线。可以类似http://www.html5canvastutorials.com/labs/html5-canvas-modify-curves-with-anchor-points-using-kineticjs/

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

【问题讨论】:

  • 我不知道 kineticJS,但我知道你可以使用这个库来让元素跟随一行:greensock.com/gsap-js

标签: javascript animation canvas kineticjs curve


【解决方案1】:

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

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

// 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、endpointPt)
  • 沿曲线计算 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);

【讨论】:

  • 谢谢。是否存在 getQuadraticBezierXYatT 函数的任何来源?如果我给出了运动的持续时间,我如何影响动画的速度?
  • getQuadraticBezierXYatT() 使用 de Casteljau 的算法绘制重构的贝塞尔曲线,其中 2 个控制点相同(具有相同控制点的三次贝塞尔曲线是二次曲线)。您可以通过更改 TDirection 来影响移动速度。
  • 感谢算法名称。我发现,TDirection 改变了运动的速度,但我无法根据给定的整个运动时间计算 TDirection 的值。
  • 动态动画为您提供计时器。 frame.time 为您提供动画已运行的毫秒数。您可以使用该时间将 TDirection 替换为基于经过时间的增量。
  • 对不起,我不明白。如果我想在 2 秒内将对象从 A 点移动到 B 点,frame.time 如何帮助我?使用 setInterval 或类似的方法不是更简单吗?
猜你喜欢
  • 2021-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-12
  • 2013-05-24
  • 2013-09-08
相关资源
最近更新 更多