Flashpunk框架有" Spritemap.as"将位图Spritesheet应用于实体的类,但框架包括" TiledSpritemap.as"
问题是 - 我可以使用它来为实体应用具有不同动画的单个spritesheet文件吗?
目标是 - 使用一个具有不同精灵的敌人类(在一个spritesheet中)
如果可能,第二个问题是如何设置X& Y偏移,如果精灵具有不同的大小
请在此处查看示例tilesspritemap(它来自VVVVVV) http://i.piccy.info/i7/12c5057ece64edccbf40af5902a6839d/4-57-1421/62678728/sprites.png
答案 0 :(得分:3)
TiledSpritemap用于将单个动画精灵图块(例如,32x32px)平铺在X或Y(或两者)之间。例如,如果你有熔岩spritesheet,其中包含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");
}
其中,而不是 spriteWidth 和 spriteHeight ,你应该在spritesheet(例如32x32)中使用单个sprite的宽度和高度,而不是 objectWidth 和 objectHeight - 对象所需的宽度和高度。函数 t.add 具有以下属性:当您调用“play”时,将使用的动画名称;用于制作动画的帧索引数组;动画的frameRate; boolean,用于设置动画是否应该循环。
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无法使用由不同大小的精灵组成的精灵表(或其他2D游戏引擎中调用的Atlases)。