2013-11-22 40 views
0

我无法理解为什么存在差分位移Result。 多边形和文字均匀移动,线条相对误差多边形移位。KineticJS为对象创建坐标

function setNewPosition(x, y) { 
       var lines = stage.find('Line'); 
       if (lines.length > 0) { 
        lines.forEach(function inLines(line) { 
         var points = line.getPoints(); 
         if (points.length > 0) { 
          points.forEach(function pSet(p) { 
           p.x += x; 
           p.y += y; 
          }); 
         } 
        }); 
       }; 
       polygons = stage.find('Polygon'); 
       if (polygons.length > 0) { 
        polygons.forEach(function inPoly(polygon) { 
         var points = polygon.getPoints(); 
         if (points.length > 0) { 
          points.forEach(function pSet(p) { 
           p.x += x; 
           p.y += y; 
          }); 
         } 
        }); 
       }; 
       texts = stage.find('Text'); 
       if (texts.length > 0) 
        texts.forEach(function inText(text) { 
         oX = text.getX(); 
         oY = text.getY(); 
         text.setX(oX + x); 
         text.setY(oY + y); 
        } 
       ); 
       layer.draw(); 
      } 
+0

_offtopic:这段代码可以得到一些refactoring_;) – c69

回答

0

我认为你不应该摆弄点。每个形状都有一个move()方法,为什么不使用它?

move()将形状相对于之前的位置移动,因此您的呼叫将会移动(-80,0)。

此外,你为什么检查查找数组的长度?如果在无用之后使用forEach,因为forEach在没有找到任何内容时只会执行任何操作。

另一个想法:你使用forEach,这是为IE9 +。为什么不使用Kineticjs Collection.each()方法呢?

编辑: 你也可以移动整个图层,无需循环找到的对象。