{"id":750,"date":"2021-06-12T19:13:28","date_gmt":"2021-06-12T11:13:28","guid":{"rendered":"http:\/\/blog.xrhoujie.com\/?p=750"},"modified":"2021-05-31T19:25:20","modified_gmt":"2021-05-31T11:25:20","slug":"%e4%bd%bf%e7%94%a8%e8%bf%9c%e7%ab%afplist%e5%9b%be%e9%9b%86","status":"publish","type":"post","link":"http:\/\/blog.xrhoujie.com\/?p=750","title":{"rendered":"\u4f7f\u7528\u8fdc\u7aefplist\u56fe\u96c6"},"content":{"rendered":"<div>\n<div>\u9996\u5148\u8981\u8fdb\u884cload\uff0cload\u540e\u8fdb\u884c\u62c6\u5206\u56fe\u96c6\u6570\u636e\uff0c\u62c6\u5206\u540e\u521d\u59cb\u5316\uff0c\u521d\u59cb\u5316\u540e\u5f00\u59cb\u5206\u7ec4\uff0c\u6700\u540e\u662f\u6e32\u67d3<\/div>\n<\/div>\n<div><\/div>\n<div>&#8211;&gt; \u5b9a\u4e49 loaderp.js\u5e93<\/div>\n<div>\n<div>\n<div>\/**<\/div>\n<div>* Extends cc with loaderp (promisified loader)<\/div>\n<div>*\/<\/div>\n<div>if (cc &amp;&amp; cc.loader) {<\/div>\n<div>constloader = cc.loader;<\/div>\n<div>constloaderp = cc.loaderp = {};<\/div>\n<div>varpromisify = function (method) {<\/div>\n<div>returnfunction (&#8230;args) {<\/div>\n<div>returnnewPromise((rs, rj) =&gt; {<\/div>\n<div>args.push((err, data) =&gt; {<\/div>\n<div>if (err) {<\/div>\n<div>rj(err);<\/div>\n<div>} else {<\/div>\n<div>rs(data);<\/div>\n<div>}<\/div>\n<div>});<\/div>\n<div>loader[method].apply(loader, args)<\/div>\n<div>})<\/div>\n<div>};<\/div>\n<div>};<\/div>\n<div>\/**<\/div>\n<div>* Promisified cc.loader.loadRes<\/div>\n<div>*\/<\/div>\n<div>loaderp.loadRes = promisify(&#8216;loadRes&#8217;);<\/div>\n<div>\/**<\/div>\n<div>* Promisified cc.loader.load<\/div>\n<div>*\/<\/div>\n<div>loaderp.load = promisify(&#8216;load&#8217;)<\/div>\n<div>\/**<\/div>\n<div>* Load multiple resource<\/div>\n<div>* const resources = [<\/div>\n<div>* [&#8216;atlas&#8217;, cc.SpriteAtlas],<\/div>\n<div>* [&#8216;json&#8217;]<\/div>\n<div>* ];<\/div>\n<div>* cc.loaderp.loadResAll(resources).then(([atlas, json]) =&gt; {<\/div>\n<div>* this.atlas = atlas;<\/div>\n<div>* this.json = json;<\/div>\n<div>* })<\/div>\n<div>*\/<\/div>\n<div>loaderp.loadResAll = function (paramArray) {<\/div>\n<div>constpromises = paramArray.map(args=&gt;cc.loaderp.loadRes.apply(cc.loaderp, args));<\/div>\n<div>returnPromise.all(promises);<\/div>\n<div>};<\/div>\n<div>loaderp.loadAll = function (paramArray) {<\/div>\n<div>constpromises = paramArray.map(args=&gt;cc.loaderp.load.apply(cc.loaderp, args));<\/div>\n<div>returnPromise.all(promises);<\/div>\n<div>};<\/div>\n<div>\/**<\/div>\n<div>* Load sprite atalas from remote url<\/div>\n<div>* @param {String} url, url without extension<\/div>\n<div>* @return {Promise}<\/div>\n<div>*\/<\/div>\n<div>loaderp.loadAtalas = function (url1,url2) {<\/div>\n<div>returnthis.loadAll([[url1], [url2]]).then(([plist, texture]) =&gt; {<\/div>\n<div>if (!plist || !plist.frames) return;<\/div>\n<div>\/\/ create sprite frames from plist and texture<\/div>\n<div>constspriteFrames = {}<\/div>\n<div>for (letnameinplist.frames) {<\/div>\n<div>letframe = plist.frames[name];<\/div>\n<div>letrect = plistArrayToCcType(frame.frame, cc.Rect);<\/div>\n<div>letoffset = plistArrayToCcType(frame.offset, cc.Vec2);<\/div>\n<div>letoriginalSize = plistArrayToCcType(frame.sourceSize, cc.size);<\/div>\n<div>constspriteFrame = newcc.SpriteFrame();<\/div>\n<div>spriteFrame.name = name;<\/div>\n<div>spriteFrame.setTexture(texture, rect, frame.rotated, offset, originalSize);<\/div>\n<div>spriteFrames[name] = spriteFrame;<\/div>\n<div>}<\/div>\n<div>returnspriteFrames;<\/div>\n<div>})<\/div>\n<div>};<\/div>\n<div>\/**<\/div>\n<div>* Convert {x,y}, {{x,y}, {width, height}} to cc types (cc.Rect, cc.size, cc.Vec2, etc.)<\/div>\n<div>* @param {String} plistArrayStr<\/div>\n<div>* @param {Function} ctor<\/div>\n<div>* @return {Object}<\/div>\n<div>*\/<\/div>\n<div>constplistArrayToCcType = functionplistArrayToCcType (plistArrayStr, ctor) {<\/div>\n<div>constary = plistArrayStr.replace(\/[^0-9,]\/g, &#8221;).split(&#8216;,&#8217;).map(x=&gt;parseInt(x, 10));<\/div>\n<div>returnnewctor(&#8230;ary);<\/div>\n<div>}<\/div>\n<div>}<\/div>\n<\/div>\n<\/div>\n<div><\/div>\n<div><\/div>\n<div>game.js \u6e38\u620f\u4e3b\u573a\u666f\u9875\u9762<\/div>\n<div><\/div>\n<div>\n<div>\n<div>\/\/\u8bfb\u53d6\u56fe\u96c6plist\u6587\u4ef6\u4e0e\u56fe\u7247\uff0c\u653e\u5230\u4e00\u4e2a\u6570\u7ec4\u91cc<\/div>\n<div>loadAtlas(url) {<\/div>\n<div>constplistUrl = _json.resources.plist[url]<\/div>\n<div>constpngUrl = _json.resources.images[url]<\/div>\n<div>cc.loaderp.loadAtalas(plistUrl, pngUrl).then(altas=&gt; {<\/div>\n<div>this.altas = altas<\/div>\n<div>letframes = this._frames = []<\/div>\n<div>for (letiinaltas) {<\/div>\n<div>frames.push(altas[i]);<\/div>\n<div>}<\/div>\n<div>})<\/div>\n<div>},<\/div>\n<\/div>\n<div>\n<div>\n<div>this.loadAtlas(&#8216;picAltas&#8217;)\u00a0 \/\/\u00a0 picAltas \u4e3a\u56fe\u96c6\u540d\u5b57<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div><\/div>\n<div><\/div>\n<div>\/\/\u624b\u52a8\u5b9a\u4e49\u56fe\u96c6frame<\/div>\n<div>\n<div>\n<div>_createAtlas () {<\/div>\n<div>this.atlas = newcc.SpriteAtlas();<\/div>\n<div>this._frames.forEach(f=&gt;this.atlas._spriteFrames[f._name] = f);<\/div>\n<div>},<\/div>\n<div><\/div>\n<\/div>\n<div>\/\/<\/div>\n<div><\/div>\n<\/div>\n<div>\n<div>\u00a0\/\/\u6dfb\u52a0sprite\u7ec4\u4ef6\uff0c\u6dfb\u52a0animation\u7ec4\u4ef6\uff0c\u52a8\u753b\u64ad\u653e\u6a21\u5f0f\uff0c\u4e0e\u901f\u7387\uff0c\u52a8\u753b\u540d\u5b57\uff0c\u6dfb\u52a0\u5230\u7ec4\u4ef6\u4e0a<\/div>\n<div>\n<div>\n<div>creatAnimationClip(){<\/div>\n<div>letsprite = this.getComponent(cc.Sprite)<\/div>\n<div>if (!sprite) sprite = this.addComponent(cc.Sprite);<\/div>\n<div>sprite.srcBlendFactor = this.srcBlendFactor;<\/div>\n<div>constanim = this.animation = this.addComponent(cc.Animation);<\/div>\n<div>constclip = this.clip = cc.AnimationClip.createWithSpriteFrames(this._getFrames(), this.sample);<\/div>\n<div>\/\/ animation clip name must be set before add to animation<\/div>\n<div>clip.name = &#8216;comp-spriteframe-anim&#8217;<\/div>\n<div>anim.addClip(clip);<\/div>\n<div>},<\/div>\n<\/div>\n<\/div>\n<div>\n<div>\n<div><\/div>\n<div><\/div>\n<div>\/\/\u83b7\u53d6\u81ea\u5b9a\u4e49\u52a8\u753b\u526a\u8f91<\/div>\n<div>gifCustomClip(node, prefix, sample = 10, repeat = -1, wrapMode = &#8220;Normal&#8221;) {<\/div>\n<div>constg = node.getComponent(&#8220;Gif&#8221;)<\/div>\n<div>constframes = []<\/div>\n<div>varj = 1<\/div>\n<div>for (letiinthis.altas) {<\/div>\n<div>if (i == prefix + j + &#8220;.png&#8221;) {<\/div>\n<div>frames.push(this.altas[i]);<\/div>\n<div>j++<\/div>\n<div>}<\/div>\n<div>}<\/div>\n<div>g.sample = sample<\/div>\n<div>g._frames = frames<\/div>\n<div>\/\/\u521d\u59cb\u5316gif\u7ec4\u4ef6\uff0c\u521b\u5efa\u52a8\u753b\u526a\u8f91,\u5e76\u4e14\u6dfb\u52a0\u5230animation\u7ec4\u4ef6\u4e0a(\u5728gif.js\u6587\u4ef6\u91cc)<\/div>\n<div>g.creatAnimationClip()<\/div>\n<div>g.WrapMode = cc.WrapMode[wrapMode]<\/div>\n<div>g.repeatCount = repeat<\/div>\n<div>\/\/\u5f00\u59cb\u64ad\u653e\uff0c<\/div>\n<div>g.play(repeat)<\/div>\n<div>},<\/div>\n<\/div>\n<\/div>\n<div><\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u9996\u5148\u8981\u8fdb\u884cload\uff0cload\u540e\u8fdb\u884c\u62c6\u5206\u56fe\u96c6\u6570\u636e\uff0c\u62c6\u5206\u540e\u521d\u59cb\u5316\uff0c\u521d\u59cb\u5316\u540e\u5f00\u59cb\u5206\u7ec4\uff0c\u6700\u540e\u662f\u6e32\u67d3 &#8211;&#038;g [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":307,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[30],"tags":[32],"_links":{"self":[{"href":"http:\/\/blog.xrhoujie.com\/index.php?rest_route=\/wp\/v2\/posts\/750"}],"collection":[{"href":"http:\/\/blog.xrhoujie.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.xrhoujie.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.xrhoujie.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.xrhoujie.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=750"}],"version-history":[{"count":1,"href":"http:\/\/blog.xrhoujie.com\/index.php?rest_route=\/wp\/v2\/posts\/750\/revisions"}],"predecessor-version":[{"id":751,"href":"http:\/\/blog.xrhoujie.com\/index.php?rest_route=\/wp\/v2\/posts\/750\/revisions\/751"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/blog.xrhoujie.com\/index.php?rest_route=\/wp\/v2\/media\/307"}],"wp:attachment":[{"href":"http:\/\/blog.xrhoujie.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=750"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.xrhoujie.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=750"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.xrhoujie.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=750"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}