cocos-pkgjson

a pkgJson tool, convert plist file to json data. It can be custom pkgLoader used directly


Keywords
pkgJson, cocos2d-JS, cocos2d-html5, _pkgJsonLoader
License
MIT
Install
npm install cocos-pkgjson@1.0.4

Documentation

cocos-pkgjson

Build Status Coverage Status

English

a pkgJson tool, convert plist file to json data. It can be custom pkgLoader used directly

中文说明

这是一个用于生成pkgJson的工具:将.plist文件中的数据提取出来,生成cocos底层SpriteFrame的数据结构,这样在加载.pkgJson之后,使用cc._pkgJsonLoader即可直接使用数据。避免了像在加载plist文件后,还需要解析plist数据才能生成底层需要的结构。简单言之:将解析plist的数据提前,减少网络请求,加快数据获取。

有这个想法写这个工具也是由于看到了这篇文章:cc.spriteFrameCache 改造说明,但是官方并没有提供pkgJson文件的生成方式,而且个人在生成pkgJson的同时,也在官方的原基础做了一次优化,生成的pkgJson一次到位,cc._pkgJsonLoader只负责将数据存储在cc.loader.cache中即可。

作用

parse(content) || parse(content, "frame")

parse spriteFrame

parse(content, other)(other !== "frame")

parse plist content to json

How to Use

Node.js

Install using npm:

npm i cocos-pkgjson

Then require() the cocos-pkgjson module in your file:

const fs = require('fs');
const pkgJson = require('cocos-pkgjson');

// Here I use fs.readFileSync get .plist file content
let content = fs.readFileSync("test.plist", "utf8");

console.log(JSON.stringify(pkgJson.parse(content)));
/**
 * content: Data to be parse
 * type: type of parse
 *      "frame": parse spriteFrame, default
 *      "other": only parse content to Json
 */
parse(content, type);

String result:

{"_inited":true,"frames":{"0.png":{"rect":{"x":1,"y":55,"width":64,"height":49},"rotated":false,"offset":{"x":0,"y":0},"size":{"width":64,"height":49},"aliases":[]},"1.png":{"rect":{"x":1,"y":1,"width":67,"height":52},"rotated":false,"offset":{"x":0,"y":0},"size":{"width":67,"height":52},"aliases":[]}},"meta":{"image":"radio.png"}}

Json result:

配套的cc._pkgJsonLoader

cc._pkgJsonLoader = {
    load: function (realUrl, url, res, cb) {
        var self = this, locLoader = cc.loader, cache = locLoader.cache;
        locLoader.loadJson(realUrl, function (err, pkg) {
            if (err) return cb(err);
            var dir = cc.path.dirname(url);
            for (var key in pkg) {
                var filePath = cc.path.join(dir, key);
                cache[filePath] = pkg[key];
            }
            cb(null, true);
        });
    }
};

cc.loader.register(["pkgJson"], cc._pkgJsonLoader);