0

Flashpunk 框架具有将位图 Spritesheet 应用于实体的“Spritemap.as”类,而且框架包括“TiledSpritemap.as”

问题是 - 我可以使用它为实体应用具有不同动画的单个 spritesheet 文件吗?

目标是 - 使用一个具有不同精灵的敌人类(在一个精灵表中)

如果可能的话,第二个问题是如何设置 X 和 Y 偏移,如果精灵有不同的大小

在此处查看示例 tiledspritemap(来自 VVVVVV) http://i.piccy.info/i7/12c5057ece64edccbf40af5902a6839d/4-57-1421/62678728/sprites.png

4

1 回答 1

3

TiledSpritemap

TiledSpritemap 用于使单个动画精灵平铺(例如,32x32px)跨 X 或 Y(或两者)平铺。例如,如果你有熔岩精灵表,其中包含 7 个沸腾的熔岩精灵,并且你想创建熔岩池,你可以使用这个类。使用示例:

// embed a resource somewhere in your class 
[Embed(source = "../../assets/lava.png")]
private var lavaGfx:Class;

public function AnimatedEntity () 
{
  var spriteWidth:uint=32;
  var spriteHeight:uint=32;
  var objectWidth:uint=100; // pool of lava, that has 100px width
  var objectHeight:uint=32;

  var t = new TiledSpritemap(this.lavaGfx, spriteWidth, spriteHeight, objectWidth, objectHeight );
  t.add("boil", [0, 1, 2, 3, 4, 5, 6], 4, true);
  graphic = hb;
  t.play("boil");           
}

其中,您应该使用 spritesheet(例如 32x32)中单个精灵的宽度和高度,而不是 spriteWidth 和 spriteHeight,而不是objectWidthobjectHeight -对象所需宽度和高度。函数t.add具有以下属性: 调用“播放”时将使用的动画名称;要进行动画处理的帧索引数组;动画的帧率;布尔值,设置动画是否应该循环。

精灵图

Spritemap 可用于从一个 spritesheet 制作一堆不同的动画,使用代码,类似于上面提到的代码:

public function AnimatedEntity () 
{
  var spriteWidth:uint= 32;
  var spriteHeight:uint= 32;

  var t = new Spritemap(enemyGfx, spriteWidth, spriteHeight);

  t.add("run", [0, 1, 2], 10, true);
  t.add("jumpUp", [3, 4], 9, true);
  t.add("jumpDown", [5, 6], 9, true);
  t.add("attack", [7, 8, 9], 10, true);
  t.add("standIdle", [10, 11, 12], 10, true);
}

目前,开箱即用的 FlashPunk 无法使用由不同大小的 sprite 组成的 spritesheets(或 Atlases,因为它在其他 2d 游戏引擎中被称为)。

于 2013-07-20T23:34:24.340 回答