KineticJS更改对象的坐标

KineticJS changing coordinates for objects

本文关键字:坐标 对象 KineticJS      更新时间:2023-09-26

我不明白为什么会有微分位移结果。多边形和文本均匀移动,线相对误差多边形移动。

    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();
            }

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

move()将形状相对于之前的位置进行移动,因此调用将为move(-80,0)。

此外,为什么要检查查找数组的长度?如果你在之后使用forEach,那就没用了,因为当你什么都没找到的时候,forEach什么都不做。

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

编辑:你也可以移动整个层,不需要在找到的对象上循环。