tinyjs-resource-loader
用于处理 tinyjs 游戏资源的 webpack loader,旨在让 tinyjs 项目中的动画帧(雪碧图)合成流程更加符合 webpack 工作流
安装
npm install tinyjs-resource-loader -D
使用方法
- 在动画帧(雪碧图)目录中创建
.tileset
(或任意名称)配置文件
animation
├── .tileset
├── 001.png
├── 002.png
└── 003.png
- 参照图片处理参数以
yaml
格式对 .tileset
进行配置
skip: 1
colors: 16
scale: 0.5
- 在
webpack.config.js
中配置 tinyjs-resource-loader
,该 loader 应作用于上面的配置文件
module.export = {
module: {
loaders: [
{
test: /\.tileset/i,
loader: 'tinyjs-resource-loader',
query: {
output: 'game/images',
image: {
name: 'resources/[name].[ext]',
limit: 4096
},
json: {
name: 'resources/[name].[ext]',
limit: 1
}
}
}
]
},
output: {
path: path.resovle('dist')
}
};
- 在模块中引用
.tileset
文件
import tilesetAnimationJSON from './frames/animation/.tileset';
处理过程
- 动画抽帧:通过指定
skip
配置项来实现每 N 帧抽取一帧的功能 - 合成雪碧图:通过 spritesheet.js 将图片合成雪碧图并生成 tinyjs 所需的 JSON 文件
- 图片压缩:利用 node-pngquant 对合成的 PNG 格式图片按照
colors
指定的颜色值进行压缩 - 将处理得到的 JSON 和图片文件写入
game/images
目录(由 query.output
指定)
game
├── frames
│ ├── animation
│ │ ├── .tileset
│ │ ├── 001.png
│ │ ├── 002.png
│ │ └── 003.png
├── images
│ ├── tileset-animation.json
│ └── tileset-animation.png
└── resources.js
- 最后通过 url-loader 将
game/images
中的 JSON 和图片构建到 dist/resources
中(由 webpack config 中的 output.path
指定)。这一步会自动将 JSON 中 meta.image
项替换为图片的 publicPath
或 base64
编码(取决于 query.image
的配置)
dist
└── resources
├── tileset-animation.json
└── tileset-animation.png
系统依赖
在使用 tinyjs-resource-loader 处理 tinyjs 项目中的 JSON 和 png 之前,首先应确保系统中安装了以下工具:
注意:如果系统中没有安装以上的依赖,构建时会跳过处理过程中的前 4 步,直接从 output
读取 JSON 和图片,并通过 url-loader 将它们构建到指定目录中,但会产生 webpack warning。这是为了确保项目在构建过一次以后,在 windows 环境或者远程机器也能够进行构建,兼顾跨平台或者云构建的需求
配置参数
query.output
: 图片处理后输出 JSON 和图片文件的目录,一般选择源码中的目录,建议提交远程仓库query.image
:图片文件的 url-loader 参数query.json
:JSON 文件的 url-loader 参数
图片处理参数
trim
:移除图片周围的空白,参照 spritesheet.js,默认 false
scale
: 图片缩放比例,基于 imagemagick-stream 对图片进行缩放,默认 1
padding
: 雪碧图中图片的间隙,参照 spritesheet.js,默认 10
skip
:抽帧时跳过的帧数,如果指定为 N,会每跳过 N 帧保留一帧,默认 0
colors
:雪碧图进行图片压缩的颜色数,默认 256
files
: 以 [path]-[name]
对象格式配置的文件路径,如果配置了 files
,将不会从 .tileset
所在目录读取动画帧,而且从 files
指定的路径中读取
files
配置的路径为相对于 .tileset
所在目录的路径,示例:
files:
../animation-a/001.png: animation-a
../animation-b/001.png: animation-b
../animation-c/001.png: animation-c