【问题标题】:Phaser 3 animation frame offset?Phaser 3动画帧偏移?
【发布时间】:2019-09-24 20:54:18
【问题描述】:

我在 Phaser 3 中为我的精灵使用 multiatlas 和 json 文件。如何为特定帧设置偏移量(如 setOrigin

我认为 json 中有一些属性可能会有所帮助,但我不明白它们的含义。 sourceSizespriteSourceSize 有什么区别?我也看过 anchor 属性,但我怀疑它是旧的 Phaser 版本...

最好的选择是如果可以在动画定义本身中设置帧偏移,而不是在帧的 json 定义中。但有可能吗?

【问题讨论】:

  • 您是如何创建多图集文件的?
  • @brae:我使用了一个特殊的组合:leshylabs.com/apps/sstool/(JSON-TP-Array 格式)+ 文件开头和结尾的一些 TexturePacker 样式的格式。 (我不能单独使用 leshylabs 工具,但不想为 Texture Packer 付费。)

标签: phaser-framework


【解决方案1】:

编辑:没关系,我误解了这个问题。这是关于动画帧和setOriginsetOrigin 是否可以针对不同的帧而有所不同。 AFIAK 所有动画精灵都具有相同的起源,因此相同的“锚点”,但我对此不是 100% 确定。

v--旧答案--v

等等,你是否将动画序列存储在 sprite json 文件中?如果是这样,我想知道你是怎么做到的,因为 AFAIK 你必须在 JavaScript 中以编程方式创建动画序列,我通常在预加载器中这样做:

// preloader scene
create: function ()
{
    // create animations
    this.anims.create({
            key: 'anim_run',
            frames: [
                { key: 'sprites', frame: 'guyrun1' },
                { key: 'sprites', frame: 'guyrun2' },
                { key: 'sprites', frame: 'guyrun3' },
                { key: 'sprites', frame: 'guyrun2' }
            ],
            frameRate: 15,
            repeat: -1
        });

    //..etc.
},

您可以使用 startFrame 参数开始动画以偏移动画,即从第一帧以外的帧开始,像这样

// start animation with random offset
var r = Phaser.Math.RND.between(0, 3);
mainguy.play('anim_run', null, r); // key, ignoreIfPlaying = null, startFrame = r

【讨论】:

  • 我没有说 a 正在将 animation 存储在 json 中。我在 json 中为动画存储 frames,并且想知道如何为其中的一些创建偏移量。 (例如,在一个花花公子正在跳跃的帧中,y 偏移量将为正值。)这可以在帧的 json 定义或动画定义中完成。我在问是否有人知道如何。
猜你喜欢
  • 1970-01-01
  • 2020-11-09
  • 2022-08-18
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
  • 2020-03-08
  • 1970-01-01
  • 2021-03-13
相关资源
最近更新 更多