如何在Phaser.io中的onComplete回调函数内获取补间处理的对象?

时间:2015-02-15 02:52:59

标签: phaser-framework

我在循环内的多个项目上添加以下补间。我想要的是在补间完成后杀死每个项目。为此,我想知道如何在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);

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

所以我想出了另一种解决方案。我以为我和大家分享了。它非常酷,并且由于封闭而实现。 :)

  1. 将项目(从父作用域)传递给另一个函数,该函数将处理设置补间并添加onComplete回调。
  2. 在onComplete回调函数内直接引用现在在本地范围内的项目。
  3. 这种方式将项目传递给另一个函数,该函数最初位于父函数的循环中,现在具有自己的范围,并且该范围内的补间可以轻松地操作该项目。

    以下是可能有用的代码段:

    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回调中获得对目标的引用。那很有趣!! :)