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

它们中的每一个都与此示例基本相同,但对于每个基本方向:

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

由于我希望能够多次使用这些补间,所以我使用了 restart() 方法,我想从 Sprite 的当前位置播放补间,但是即使我改变了 Sprite 的位置,当我调用函数重新启动时它从它第一次播放的坐标而不是目标 Sprite 当前所在的坐标播放的补间。
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++;
});

我有什么方法可以更新补间的起点,以便重新启动它不仅仅是从之前开始的地方开始?

最佳答案

我也很沮丧试图解决这个问题(看起来似乎仍然没有解决方案,差不多一年后)。我还没有找到任何方法或最佳实践来这样做,但是通过深入研究 tween 对象,我发现您可以访问 data 数组中的 tween 属性。由于它是一个数组,如果您有多个属性,则必须通过比较它的 key 值来找到该属性。如果您只有一个,只需获取 data[0] 。该属性有一个 start 字段,您可以设置它。

在您的情况下,请尝试:

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

关于phaser-framework - Phaser 3 使用更新的起始值重新启动补间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53385011/

10-12 17:12