【问题标题】:Animate spritesheet with uequal dimensions in Phaser在 Phaser 中为具有相等尺寸的精灵表设置动画
【发布时间】:2017-08-11 01:01:21
【问题描述】:

我有精灵表:

您可以在这里看到不同的框架有不同的尺寸。而且我不知道如何从不同大小的帧制作动画。请帮帮我。

【问题讨论】:

  • 您将精灵作为一个单独的精灵图集 PNG 还是许多单独的精灵 PNG 文件?
  • @BdR,我只有这个绿色背景的.png。

标签: javascript animation phaser-framework sprite-sheet


【解决方案1】:

我认为您需要为这些精灵创建一个精灵图集(有时也称为精灵纹理)。

精灵图集是 PNG 文件和 JSON 文件(有时是 XML 文件)的组合。 PNG 文件包含整齐地打包在一起的所有精灵,而 JSON 文件包含该 PNG 文件中每个精灵的坐标。 see more info here.

Phaser(和其他库)支持这种格式并且可以加载和显示这些精灵。那么你可以做什么:

  1. 剪下每个精灵并保存为单独的 PNG 文件
  2. 给每个文件一个有用的名字
  3. 使用实用程序将 PNG 文件打包成精灵图集
  4. 加载移相器和动画

对于有用的名称,我指的是 walk_1.pngwalk_2.pngwalk_3.pngduck_1.pngduck_2.pngteleport_1.png 等名称。

为了将单独的小精灵打包到一个精灵图集中,我使用了Leshy SpriteSheet Tool,这是一个免费软件工具。还有Texture Packer,它是一个商业实用程序,有更多选择,还有更多工具可以做同样的事情,比如 ShoeBox、Phaser Editor 等。

在 Phaser.js 中,您可以加载精灵图集并添加精灵,如下所示:

// either use .atlasJSONArray or .atlasJSONHash, depends on your JSON format
game.load.atlasJSONHash('myspriteatlassheet1', 'img/myspriteatlasfile.png', 'img/myspritefile.json');
var mysprite = game.add.sprite(10, 20, 'myspritesheet1', 'walk_1');

然后像这样添加一个动画:

mysprite.animations.add('jump', ['jump_1', 'jump_2', 'jump_3', 'jump_4'], 20, true); // 20fps, loop=true
mysprite.animations.add('duck', ['duck_1', 'duck_2', 'duck_3'], 30, true);
// etc.

mysprite.animations.play('jump');

【讨论】:

  • 从不透明背景的 .png 中剪切每个小帧的最简单方法是什么?
  • 取决于您使用的图像编辑器。但最简单的可能是用矩形选择选择一个精灵,然后用魔棒选择取消选择周围的绿色。按住 Alt (Paint Dot Net) 或 Ctrl (Gimp) 单击并减去选区。然后复制并粘贴到新图像中并保存。然后对所有其他精灵重复此操作。
猜你喜欢
  • 2021-10-25
  • 1970-01-01
  • 2021-12-21
  • 2018-05-27
  • 2010-11-10
  • 2012-02-29
  • 2017-05-27
  • 2018-03-21
  • 2011-02-10
相关资源
最近更新 更多