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 :이 코드는 일부 리팩토링을받을 수 있습니다.;) – c69

답변

0

나는 당신이 포인트로 피들해서는 안된다고 생각합니다. 모든 모양에 대해 move() 메서드가 있습니다. 왜 사용하지 않으시겠습니까?

move()는 이전에 있었던 위치를 기준으로 모양을 이동하므로 호출이 이동합니다 (-80, 0).

게다가 왜 배열 길이를 확인합니까? forEach는 쓸모가 없으므로 forEach를 사용하면 forEach는 아무 것도 찾지 못했을 때 아무 것도하지 않기 때문입니다.

다른 생각 : forEach는 IE9 + 용입니다. 대신 Kineticjs Collection.each() 메서드를 사용하지 않으시겠습니까?

편집 : 그리고 전체 레이어도 이동할 수 있으므로 찾은 객체를 반복 할 필요가 없습니다.

관련 문제