相位器3使用更新的起始值重新启动补间

时间:2018-11-20 01:35:20

标签: phaser-framework

我有4个可重复使用的补间,应该将目标相对于其当前位置移动。

每个基本与本示例相同,但对于每个基本方向:

goLeft = this.tweens.add({
   targets: gamePieceSprite,
   x: {value: '-=64'},
   duration: 1000,
   paused: true
});

由于我希望能够多次使用这些补间,因此我使用了restart()方法,我想从小精灵的当前位置播放补间,但是即使我更改了小精灵的位置,当我调用该函数以重新启动补间时,它将从第一次播放的坐标开始播放,而不是从当前目标精灵所在的坐标开始播放。

var pathCounter = 0;

testPathText.on('pointerdown', function(){
    if (pathCounter % 2 == 0)
    {
      gamePieceSprite.setX(startTile.x);
      gamePieceSprite.setY(startTile.y);
    }
    else
    {
      if (levelStartRotation[level] == '1')
      {
        goLeft.restart();
      }
      else if (levelStartRotation[level] == '2')
      {
        goUp.restart();
      }
      else if (levelStartRotation[level] == '3')
      {
        goDown.restart();
      }
      else if (levelStartRotation[level] == '4')
      {
        goRight.restart();
      }
    }
    pathCounter++;
});

我是否可以通过任何方式更新补间的起点,以便重新启动它不只是从之前的起点开始?

1 个答案:

答案 0 :(得分:0)

尝试解决这个问题也让我感到沮丧(大约一年后,似乎仍然没有解决方案)。我还没有找到实现此目的的任何方法或最佳实践,但是通过挖掘补间对象,我发现您可以在其data数组中访问补间的属性。由于它是一个数组,因此如果您有多个属性,则必须通过比较其key值来查找属性。如果只有一个,只需获取data[0]。该属性具有一个您可以设置的start字段。

根据您的情况,尝试:

...
if (levelStartRotation[level] == '1')
{
   goLeft.data[0].start = startTile.x;
   goLeft.restart();
}
...