【问题标题】:Phaser 3 restarting tween with updated start valuesPhaser 3 使用更新的起始值重新启动补间
【发布时间】:2019-04-22 10:12:44
【问题描述】:

我有 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++;
});

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

【问题讨论】:

    标签: phaser-framework


    【解决方案1】:

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

    在你的情况下,尝试:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 2022-09-29
      • 1970-01-01
      • 2011-08-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多