2015-07-10 3 views
0

Итак, у меня есть цикл for, генерирующий, размещающий и tweening 20 прямоугольников. Однако код только уничтожает последний сгенерированный прямоугольник. Есть ли (идеально простой) способ гарантировать, что .destroy() применяется к каждому прямоугольнику, а не к последнему?Уничтожение нескольких фигур в конце анимации KonvaJS

$("#combat").click(function() { 

    for (var i = 0; i < 20; i++){ 

     var rect = new Konva.Rect({ 
      x: -500, 
      y: stage.height()*Math.random(), 
      width: 480, 
      height: 20, 
      fill: 'green', 
      stroke: 'black', 
      strokeWidth: 3 
     }); 

     layer.add(rect); 

     tween = new Konva.Tween({ 
      node: rect, 
      duration: 1, 
      x: 500, 
      onFinish: function() { 
       rect.destroy() 
      } 
     }).play(); 

    } 

}); 

ответ

0

Вы можете использовать Group объект для этого:

EDIT:

$("#combat").click(function() { 

    var rectGroup = new Konva.Group(); 

    for (var i = 0; i < 20; i++){    

     var rect = new Konva.Rect({ 
      x: -500, 
      y: stage.height()*Math.random(), 
      width: 480, 
      height: 20, 
      fill: 'green', 
      stroke: 'black', 
      strokeWidth: 3 
     }); 

     rectGroup.add(rect);   
     layer.add(rectGroup); 

     tween = new Konva.Tween({ 
      node: rect, 
      duration: 1, 
      x: 500, 
      onFinish: function() { 
       rectGroup.destroy() 
      } 
     }).play(); 

    } 

}); 
+0

К сожалению, это не работает. Тем не менее уничтожается только последний прямоугольник. Может быть, потому, что мы переопределяем переменную «tween» каждый цикл, который перезаписывает функцию onFinish для предыдущего определения? – user3317592

+0

Извините, это была моя ошибка, объект Group должен быть инициализирован до цикла. Код обновлен. –

+0

Это работает (огромное спасибо!), Но есть ли способ обеспечить его уничтожение только прямоугольника? Это то, что мне в конечном итоге нужно делать, потому что у меня в моей анимации «продолжительность: 2 + Math.random() * 4», и из того, что я могу сказать, скрипт уничтожает всю группу после завершения твина последнего прямоугольника. – user3317592

1
 var tween = new Konva.Tween({ 
      node: pentagon, 
      duration: 1, 
      x: 500, 
      onFinish: function() { 
       // this will be tween instance 
       // this.node will be rectangle 
       console.log(this.node); 
      } 
     }).play();