如何在Phaser.io的onComplete回调函数中获取tween作用的对象?

How can I get the object on which the tween in acting inside the onComplete callback function in Phaser.io?

我在一个循环内的多个项目上添加了以下补间。我想要的是在补间完成后杀死每个项目。为此,我想知道如何在 onComplete 回调函数中获取对补间正在作用的对象的引用。提前致谢。 :)

    var tween = game.add.tween(item.scale).to({
        x: 1.3,
        y: 1.3
    }, 100).to({
        x: 1,
        y: 1
    }, 100).start();
    tween.onComplete.add(function(){
        //item.kill(); Need to get the object of the tween to kill here!!
    }, this);

onComplete 包含的第一个值是补间的目标:

tween.onComplete.add(function(sprite, tween) { sprite.kill(); }, this);

第二个是对 Tween 对象本身的引用。

所以我想出了一个替代解决方案。我想我把它分享给大家。由于闭包,它非常酷并且实现了。 :)

  1. 将项目(从父范围)传递到另一个函数,该函数将处理设置补间并添加 onComplete 回调。
  2. 在 onComplete 回调函数中直接引用现在在本地范围内的项目。

通过这种方式将项目传递给另一个函数,该函数最初在父函数的循环中,现在有自己的范围,并且该范围内的补间可以轻松地操作项目。

这是一个可能有用的代码片段:

killEm: function(){
   for(var i = 0; i < 10; i++){
       var item = getItem(i);
       this.animateAndKill(item);
   }
},
animateAndKill(item){
       var tween = game.add.tween(item.scale).to({
          x: 1.3,
          y: 1.3
       }, 100).to({
          x: 1,
          y: 1
       }, 100).start();
       tween.onComplete.add(function(){
         item.kill(); //Local item, you are mine now!! :)
       }, this);
}

每次循环在第一个函数中运行时,第二个函数都会创建一个单独的作用域,并且每个作用域都被赋予一个项目和一个可以访问该项目的补间。现在我可以直接杀死该项目,而不必担心如何在 onComplete 回调中获取对目标的引用。那很有趣!! :)