在Paper.js中对细分和位置进行动画处理

时间:2019-04-28 16:02:43

标签: javascript animation paperjs

我需要在多边形上制作2个动画:

  1. 每个细分的自动旋转
  2. 多边形随鼠标移动

我正在尝试使用以下代码:

// onMouseMove
tool.onMouseMove = function (event) {
  mousePoint = event.point;
};

// onFrame
view.onFrame = function (event) {

  // Animation 1: Automatic circular rotation of each segment
  for (var i = 0; i < polygon.segments.length; i++) {
    var offsetRotation = new Point(Math.cos(event.time + i * 2), Math.sin(event.time + i * 2)).multiply(10);
    polygon.segments[i].point = polygonCached.segments[i].point.add(offsetRotation);
  }

  // Animation 2: the polygon moves following the mouse movements with transition
  var delta = mousePoint.subtract(polygon.position).divide(15);
  polygon.position = polygon.position.add(delta);

};

下面是整个代码:https://codepen.io/anon/pen/YMgEEe?editors=0010

使用上面的代码,每个线段的自动旋转都起作用,并且多边形完全不会跟随鼠标,并且也不会过渡。 相反,对自动旋转动画进行注释时,它会正确地跟随鼠标进行过渡。

要检查过渡是否有效,我将鼠标光标移到浏览器窗口之外,然后从另一点返回。现在,当多边形移动时,您将看不到任何过渡。

我错了吗?

1 个答案:

答案 0 :(得分:4)

也只需移动polygonCached

polygonCached.position = polygonCached.position.add(delta);

https://codepen.io/arthursw/pen/LvKPXo

多边形的缓存版本没有移动,因此每次旋转点时,其位置都会重置。