【问题标题】:Phaser game - get last frame of a spritePhaser 游戏 - 获取精灵的最后一帧
【发布时间】:2019-11-19 23:42:01
【问题描述】:

我不想播放动画,我想通过点击左右按钮来改变精灵的帧。

var sprite = game.add.sprite(200, 100, 'mySprite');
sprite.frame = 3;

现在,如果按下右键,我希望这个精灵进入下一帧

sprite.frame += 1;

如果按下左键,精灵会转到上一帧。

sprite.frame -= 1;

如果按下左键且当前帧为 0,则精灵不会更改其帧,它会在第 0 帧处停止。我希望当我单击左键时精灵从 0 转到最后一帧。

例如,在 Actionscript 3 中,我可以这样做:

sprite.gotoAndStop(sprite.totalFrames);

Phaser/JS 中是否有“totalFrames”?

【问题讨论】:

  • 使用这样的东西会不会更容易? => phaser.io/examples/v2/animation/two-frame-test
  • @Julián 我在平台游戏中使用类似的东西,正如我所说,当单击按钮时,我希望精灵转到下一帧/上一帧(更改一帧不播放动画),如果精灵当前帧为 0 并按下左键,它应该转到最后一帧。我看不出这个例子有什么帮助。
  • @Abadziluk 试试 sprite.animations.frameTotal
  • @juvian 就是这样,我已经创建了一个自定义变量,但是谢谢,我以后会这样做。

标签: javascript phaser-framework


【解决方案1】:

我没有找到任何答案,我为所有对象创建了一个自定义变量“totalFrames”。第一帧是0,然后是1,以此类推……

if (rightClick)
{
   objects.frame += 1;
}
else if (leftClick)
{
   if (objects.frame > 0)
   {
      objects.frame -= 1;
   }
   else
   {
      objects.frame = objects.totalFrames;
   }
}

【讨论】:

  • 我只是好奇,想创建什么动画效果?您是否使用多个精灵表,每个精灵具有不同数量的动画帧?
  • @BdR 是的,我使用了许多动画帧数不同的精灵表。
  • 你不需要检查第一个 if 条件,以便在增加 objects.frame 时不超过 totalFrames 的数量(就像你在减少时所做的那样)?
  • @humbolight 我也有同样的看法,但是如果精灵的帧是最后一帧并且您单击“右”进入下一帧,精灵会显示第一帧 (0)。但如果您在第一帧并单击左转到最后一帧,则它不起作用。至少对我来说是这样,你可以自己试试。
【解决方案2】:

有点晚了,买你可以试试 Phaser.GameObjects.Sprite.anims.getTotalFrames()

【讨论】:

    猜你喜欢
    • 2021-09-28
    • 2020-03-13
    • 2021-01-07
    • 2016-11-29
    • 2018-03-21
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多