帧动画

逐帧播放动画应该使用的很广泛,在 Tiny.js 里,可以使用 Tiny.AnimatedSprite 类来创建帧动画。

假设我们有四个序列帧,如下:

// 声明一个数组,用于存放序列帧图的纹理
var textures = [];
for (var i = 0; i < 4; i++) {
  // 将帧图挨个添加到纹理数组中
  textures.push(Tiny.Texture.fromImage('https://gw.alipayobjects.com/as/g/tiny/resources/1.0.0/images/hao/hao' + i + '.png'));
}

// 这个纹理数组就是类初始化的入参
var mc = new Tiny.AnimatedSprite(textures);
// 设置动画速度,值越大速度越快
mc.animationSpeed = 0.08;
// 立即播放
mc.play();

上面代码的预览效果如下:

静态创建

前面介绍了通过 Tiny.AnimatedSprite 类来创建帧动画,也可以通过它的静态方法 fromImages 来创建:

var images = [];
for (var i = 0; i < 4; i++) {
  // 将帧图挨个添加到图片数组中
  images.push('https://gw.alipayobjects.com/as/g/tiny/resources/1.0.0/images/hao/hao' + i + '.png');
}
var mc = Tiny.AnimatedSprite.fromImages(images);

另外,也可以通过 frame 来创建:

// 创建一个加载器
var loader = new Tiny.loaders.Loader();
loader
    // 添加 tileset 文件
  .add('https://gw.alipayobjects.com/as/g/tiny/resources/1.0.0/images/tiles/mole_tile.json')
    // 加载完成回调
  .load(function () {
    // 将 tileset 文件中定义的 frame 名放到数组 frames 中
    var frames = ['ali_mole.png', 'ali_mole_hit.png'];
    // 调用 Tiny.AnimatedSprite 的静态方法 fromImages 来创建帧动画,入参就是上面的 frames 数组
    var mc = Tiny.AnimatedSprite.fromImages(frames);
  });

播放&暂停

调用 Tiny.AnimatedSprite 实例化对象的 play 方法,就会立即播放帧动画,也可以使用 gotoAndPlay 方法从某帧开始播放:

mc.play();
// 从第 0 帧开始播放
mc.gotoAndPlay(0);

暂停就是 stop 方法,也可以使用 gotoAndStop 方法直接暂停到某帧:

mc.stop();
// 直接到达第三帧,并暂停
mc.gotoAndStop(3);

速度控制

设置实例化对象的属性 animationSpeed 可以控制动画的速度:

// 动画的速度是,值越大速度越快,这里的 1/60 相当于每秒一帧
mc.animationSpeed = 1 / 60;
// 这里的 1 相当于每秒 60 帧
mc.animationSpeed = 1;

反转

调用实例化对象的 reverse 方法就可以反转播放动画:

mc.reverse();

当前帧

调用实例化对象的 currentFrame 属性,就可以获取当前播放的帧:

console.log(mc.currentFrame);
//=> 7

监听帧变化

设置实例化对象的 onFrameChange 方法可以监听帧变化:

mc.onFrameChange = function () {
  console.log(new Date()).toLocaleTimeString());
};
//=> ..
//=> 下午8:32:12