2013-03-21 75 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