studiojs

August 11, 2017 · View on GitHub

studiojs 是一款专注于帧动画的、简单的、渐进式的 2D 渲染引擎。

主要包含类: Frame、Track、Stage。 可独立使用、组合使用。

API 文档

Frame

Frame 是帧动画的基础单位,声明帧动画的播放内容。

示例:

var Frame = studiojs.Frame,
    canvas = document.getElementById('myCanvas');

var data = {
    images: [img],
    frames: [
        // x, y, width, height, offX*, offY*, imageIndex*
        [355, 0, 86, 282, 34, 9],
        [853, 27, 79, 76, 37, 9],
        // etc.
    ],
    animations: {
        forward: ["0-24"],
        back: ["24-0"]
    }
};

var material = new Frame(canvas, data, "forward", 20);

setInterval(()=> {
    material.update();
}, 16);

实例化一个 Frame

// data, animation, times, canvas

var material = new Frame(canvas, data, "forward", 20);

1. data

数据声明

var data = {
    images: [img],
    frames: [
        // x, y, width, height, offX*, offY*, imageIndex*
        [355, 0, 86, 282, 34, 9],
        [853, 27, 79, 76, 37, 9],
        // etc.
    ],
    animations: {
        forward: ["0-24"]
    }
};
  • images

    图片对象,以数组形式传入,如 [img]

  • frames

    声明每一帧对应渲染参数

    • x,y 在原图中起始位置
    • width, height 为对应宽高
    • offX, offY 可选,表示渲染的起始位置,默认为 0, 0
    • imageIndex 可选,对应 images 的索引 index,默认为 0
  • animations

    可选,表示播放的队列,默认播放队列为 images 顺序播放

    自定义播放队列,{ 播放队列名: 播放队列的frames的索引数组 },如下表示 forward 队列播放 frames 索引为 0,1,2 的帧。

    animations: {
        forward: [0, 1, 2]
    }
    

    简写方式, ["0-24"] 表示 [0, 1, 2, 3 ... 24]

    animations: {
        forward: ["0-24"]
    }
    

2. animation

表示使用播放队列,如上例子表示将用 walk 对应的播放队列。

3. times

可选,用于控制播放速率,默认为1。 times = 20 表示调用 20 次 update,才会有一次真正的更新

4. canvas

绘制位置,canvas DOM。

Frame 实例使用方式

如下示例,material 为 Frame 的一个实例,具备以下属性、方法

// data, animation, times, canvas

var material = new Frame(canvas, data, "forward", 20);

属性

  • x、y
    起始绘制坐标

方法

  • .update() 播放下一帧

  • .prev() 播放上一帧

  • .onFrame(function(){}) 回调监听,每一帧更新渲染后回调

  • .onEnd(function(){}) 回调监听,播放队列完成后回调

  • .onClear() 清空播放队列

var material = new Frame(canvas, data, "forward", 20);

material
    .onFrame(function(i){
        console.log("frame");
    })
    .onEnd(function(){
        console.log("end");
    });

setInterval(()=> {
    material.update();
}, 16);

Track

轨道,能够加入多个 Frame,使其排队顺序播放

示例:

var track = new Track(canvas);

var material1 = new Frame(data, 'forward'),
    material2 = new Frame(data, 'back');

track.add([material1, material2]);

setInterval(()=> {
    track.update();
}, 16);

实例化一个 Track

// canvas, zIndex

var track = new Track(canvas, zIndex);

1. canvas

绘制位置,canvas DOM。

2. zIndex

可选,层级(与 stage 结合使用)

Track 实例使用方式

如下示例,track 为 Track 的一个实例,具备以下方法

var track = new Track(canvas);

方法

  • .add(material) 添加 material (frame) 到 track 队列中

  • .update() 播放下一帧

  • .prev() 播放上一帧

Stage

舞台,能够包含多个 Track,各个 Track 并列播放, 合并展示

示例:

var stage = new Stage(canvas)
var track1 = new Track(),
    track2 = new Track();

stage.add([track1, track2]);

//  ...

track1.add([material1, material2]);
track2.add([material3, material4]);

setInterval(()=> {
    stage.update();
}, 16);

实例化一个 Stage

// canvas, zIndex

var stage = new Stage(canvas);

1. canvas

绘制位置,canvas DOM。

Stage 实例使用方式

如下示例,stage 为 Stage 的一个实例,具备以下方法

var stage = new Stage(canvas);

方法

  • .add(track) 添加 track 到 stage

  • .update() 播放下一帧

  • .prev() 播放上一帧