2013-11-22 3 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()?

EDIT: И вы можете перемещать весь слой тоже, не нужно перебирать найденные объекты.

Смежные вопросы