2013-03-21 71 views
2

我有一个像这样的按钮1。如何在KineticJS中复制和粘贴形状

var Button1 = new Kinetic.Polygon({ 
      points: [0, 0, 0, 30, 15, 15], 
      fill: 'rgb(0, 255, 0)' 
     }); 

现在我想复制它(复制它)。我会怎么做?

我想这一点 -

var Button2 = new Kinetic.Polygon(); 
    Button2 = Button1; 

这不起作用,因为只有一个拷贝被绘制在画布上。

我该怎么做?

回答

5

复制在KineticJS对象的最简单方法是使用克隆方法:

var Button1 = new Kinetic.Polygon({ 
     points: [0, 0, 0, 30, 15, 15], 
     fill: 'rgb(0, 255, 0)' 
}); 

var Button2 = Button1.clone(); 

Button2的是现在的Button1您的建议

+1

另外,别忘了做layer.add(Button2);和layer.draw();使物体出现在舞台上。 – SoluableNonagon 2013-03-21 14:54:07

+0

这是复制和粘贴的官方方式,所以我打算接受这一点。感谢你的回答。 – 2013-03-21 15:43:48

+1

你也可以在clone方法中传入参数来覆盖原始对象中的参数,如Button1.clone({fill:'rgb(0,123,0)'});这意味着它将具有相同的点,但填充不同。 – SoluableNonagon 2013-03-21 19:29:46

0

这个怎么样:

var buttonData = { 
      points: [0, 0, 0, 30, 15, 15], 
      fill: 'rgb(0, 255, 0)' 
     } 

var Button1 = new Kinect.Polygon(buttonData); 
var Button2 = new Kinect.Polygon(buttonData); 

+0

感谢完全相同的副本。我从来没想过那个。但是这种方法更好,或者$ .extend()(就性能而言,哪一个更通用) – 2013-03-21 12:43:52

0

Button1和Button2现在指向相同的动力学对象。

你可以尝试使用jQuery的扩展方法

var Button2 = $.extend({}, Button1); 

这将使对象的副本。

+0

.clone()方法更好,并且内置于KineticJS中。 – BKH 2013-04-29 07:49:17