2013-03-21 50 views
0

与同计算器用户的帮助后更新drawFunc,我能够用改变两行的舞台上的位置和一个圆以下内容:KineticJS - 另一个阶段的对象已被移动

    var circle2 = new Kinetic.Circle({ 
        drawFunc: function(canvas) { 
         var context2 = canvas.getContext(); 
         var centerX2 = blueLine2.getPosition().x; 
         centerY2 = greenLine2.getPosition().y; 
         context2.drawImage(gArrow2, -156, -23 + centerY2, 11, 23); 
         context2.drawImage(gArrow2, 156, -23 + centerY2, 11, 23); 
         context2.drawImage(bArrow2, centerX2, 156, 23, 11); 
         context2.drawImage(bArrow2, centerX2, -156, 23, 11); 
         context2.beginPath(); 
         context2.arc(centerX2, centerY2, this.getRadius(), 0, 2 * Math.PI, false); 
         context2.lineWidth = this.getStrokeWidth(); 
         context2.strokeStyle = this.getStroke(); 
         context2.stroke(); 
        }, 
        x: cx + gx, 
        y: cy + gy, 
        radius: 70, 
        stroke: '#00ffff', 
        strokeWidth: 3, 
        opacity: 0.5 
       }); 
       layer2.add(circle2); 

它的伟大工程,现在我的挑战是,如果我移动线的第二阶段,例如水平线,我也可以使用移动在第一阶段的卧式线:

 greenLine2.on('dragend', function (event) { 
     var y1 = greenLine2.getPosition().y; 
     greenLine3.setPoints([0, 256 + y1, 512, 256 + y1]); 
     centerY3 = 256 + y1; 
     layer3.draw(); 
     layer2.draw(); 
    }); 

不过,我可以” t更新图层以移动垂直线和圆。我会很感激你的建议,在此先感谢。

+0

发布jsfiddle如果你想要更多的帮助 – SoluableNonagon 2013-03-21 15:01:53

回答

1

可以说,greenLine2是你正在移动的那个,并且你希望greenLine3移动到另一个舞台上的相同位置。我将假设阶段大小相同,但您可以更改代码以应对这些更改。

greenLine2.on('dragmove', function (event) { 
    var userPos = stage.getUserPosition(); //if this doesnt work the way you need, try a different approach, such as below: 
    //var userPos = greenLine.getPosition(); //other possibility 
    greenLine3.setPosition(userPos); 
    layer3.draw(); 
    layer2.draw(); 
}); 

,如果你想其他的事情也移动,你可以使用.setPosition同类的代码()有一些偏移,使得图形是相对的。

另一种方法是在每个阶段创建一个组,并使组可拖动,这样,您可以同时拖动组中的所有项目,并跨阶段同步拖动。

+0

非常感谢,greenLine.getPosition()工作得很好。 – hncl 2013-03-21 16:02:05

相关问题