Files
fc/dev/project/library/imports/45/45852a7c-3d0c-4961-85b3-132865767d79.js
2026-05-24 10:21:26 +08:00

398 lines
11 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"use strict";
cc._RF.push(module, '45852p8PQxJYYWzEyhldn15', 'nx.res');
// Scripts/nx/kernel/nx.res.js
"use strict";
/*******************************************************************************
*
* Nx 资源相关方法
*
*
*
* 2021.12.10
******************************************************************************/
var ERR = require("error");
var NxObject = require("nx.object");
var nxResource = cc.Class({
"extends": NxObject,
name: "nxResource",
// 初始化
initialize: function initialize(_args) {
// USPER
if (!this._super(_args)) {
return false;
}
// 全局服务开启
nx.res = this;
// 原生目录创建
this._buildFolder();
return true;
},
// 销毁
uninitialize: function uninitialize() {
// 全局服务关闭
nx.res = null;
// USPER
return this._super();
},
// ---------------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------------
// 本地化资源格式统配
// 通配符格式化
// {lang}本地化语种
// {chnn}渠道
// {com}全局通用路径
// {skin}皮肤路径
fmtPath: function fmtPath(_fmt) {
var rt = _fmt.trim();
// 全局通配
rt = rt.replace("{lang}", nx.getLocLanguage());
rt = rt.replace("{com}", "coms");
// 渠道通配
var channelName = nx.bridge ? nx.bridge.vget("channelName") : "gf";
rt = rt.replace("{chnn}", channelName);
// let theme = nx.frame.vget( "Theme" );
// if( nx.dt.arrNEmpty( theme ) && theme.length == 2 ) {
// let path = cc.path.join( "skins", theme[ 0 ] );
// rt = rt.replace( "{skin}", path );
// }
return rt.replace("//", "/");
},
// 是否语言相关
isBindLang: function isBindLang(_fmt) {
return nx.dt.strNEmpty(_fmt) && _fmt.indexof("{lang}") >= 0;
},
// ---------------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------------
// 各种加载
// 加载资源
loadRes: function loadRes(_path, _type, _cb) {
// 常驻缓存
var asset = nx.assets.queryAsset(_path);
if (asset) {
nx.dt.fnInvoke(_cb, null, asset);
return;
}
// 包读取
cc.loader.loadRes(_path, _type, function (_err, _data) {
// 失败
if (_err) {
nx.error("[资源]资源加载失败!", _path);
nx.dt.fnInvoke(_cb, _err);
return;
}
nx.dt.fnInvoke(_cb, null, _data);
});
},
// 读取JSON
loadJson: function loadJson(_path, _cb) {
this.loadRes(_path, cc.JsonAsset, function (_err, _data) {
nx.dt.fnInvoke(_cb, _err, _data ? _data.json : {});
});
},
// 读取字体
loadFont: function loadFont(_path, _cb) {
this.loadRes(_path, cc.Font, _cb);
},
// 读取纹理
loadSpriteFrame: function loadSpriteFrame(_path, _cb) {
this.loadRes(_path, cc.SpriteFrame, _cb);
},
// 读取图集
loadSpriteAtlas: function loadSpriteAtlas(_path, _cb) {
this.loadRes(_path, cc.SpriteAtlas, _cb);
},
// 读取Texture
loadTexture2D: function loadTexture2D(_path, _cb) {
this.loadRes(_path, cc.Texture2D, _cb);
},
// 读取图集子图
loadAtlasFrame: function loadAtlasFrame(_path, _cb) {
var pos = _path.lastIndexOf("\/");
if (pos == -1 || pos == _path.length - 1) {
nx.warn("[资源]AtlasFrame读取失败,无效的路径!");
nx.dt.trycatch(function () {
nx.dt.fnInvoke(_cb, nx.genError(ERR.COM.EmptyPath));
});
return;
}
// 拆分
var path = _path.substr(0, pos);
var frmName = _path.substr(pos + 1, _path.length);
var done = function done(_err, _data) {
// 错误
if (_err) {
nx.dt.fnInvoke(_cb, _err, _data);
return;
}
var _sframe = _data.getSpriteFrame(frmName);
if (_sframe) {
nx.dt.fnInvoke(_cb, null, _sframe);
return;
}
nx.warn("[资源]AtlasFrame读取失败,无效的子图:%s", frmName);
nx.dt.fnInvoke(_cb, nx.genError(ERR.COM.InvalidAsset));
};
this.loadRes(path, cc.SpriteAtlas, function (_err, _data) {
nx.dt.trycatch(function () {
done(_err, _data);
});
});
},
// 读取音乐
loadAudio: function loadAudio(_path, _cb) {
this.loadRes(_path, cc.AudioClip, _cb);
},
// 读取SPINE
loadSpine: function loadSpine(_path, _cb) {
this.loadRes(_path, sp.SkeletonData, _cb);
},
// 初始化Prefab
loadPrefab: function loadPrefab(_path, _cb, _showWait) {
if (_showWait === void 0) {
_showWait = true;
}
this.loadRes(_path, cc.Prefab, function (_err, _data) {
nx.dt.fnInvoke(_cb, _err, _data);
});
},
// 初始化资源目录
loadResDir: function loadResDir(_path, _cb) {
cc.loader.loadResDir(_path, function (_err, _assets) {
if (!_err) {
nx.dt.fnInvoke(_cb, null, _asset);
return;
}
// 失败
nx.warn("[资源]loadResDir加载失败:", _path);
nx.dt.fnInvoke(_cb, nx.genError(ERR.CLI.FailedLoadAsset));
});
},
// 远程加载
loadRemote: function loadRemote(_url, _cb) {
// 具体执行
var fire = function fire() {
// 判空
if (nx.dt.strEmpty(_url)) {
nx.warn("[远程]loadRemote加载失败,无效的路径!");
nx.dt.fnInvoke(_cb, nx.genError(ERR.COM.EmptyPath));
return;
}
// 加载
_url += "?t=" + cc.sys.now();
nx.debug("[远程]loadRemote:%s", _url);
cc.assetManager.loadRemote(_url, function (_err, _asset) {
// 成功
if (!_err) {
nx.dt.fnInvoke(_cb, null, _asset);
return;
}
nx.error("[远程]loadRemote加载失败:" + _err.message);
nx.dt.fnInvoke(_cb, nx.genError(ERR.CLI.FailedLoadAsset));
});
};
nx.dt.trycatch(function () {
fire();
});
},
// ------------------------------------------------------------
// 資源预加载
// ------------------------------------------------------------
// 预加载指定资源
preload: function preload(_path, _type, _cb) {
this.preQueue = this.preQueue || [];
this.preQueue.push({
dir: false,
path: _path,
type: _type,
doneCb: _cb || nx.dt.fnEmpty
});
// 队列触发
if (!this.preLoading) {
this.nextPreload();
}
},
// 预加载指定目录
preloadDir: function preloadDir(_path, _type, _progCB, _doneCB) {
this.preQueue = this.preQueue || [];
this.preQueue.push({
dir: true,
path: _path,
type: _type,
doneCb: _doneCB || nx.dt.fnEmpty,
progCb: _progCB || nx.dt.fnEmpty
});
// 队列触发
if (!this.preLoading) {
this.nextPreload();
}
},
// 下波预加载
nextPreload: function nextPreload() {
// 空队列
if (nx.dt.arrEmpty(this.preQueue)) {
this.preLoading = false;
return;
}
// 进行中
if (this.preLoading) {
return;
}
// 预加载
var self = this;
var task = this.preQueue.shift();
var done = function done(_err, _data) {
self.preLoading = false;
if (_err) {
task.doneCb(_err);
return;
}
task.doneCb(null, _params);
};
this.preLoading = true;
if (task.dir) {
cc.loader.preloadDir(task.path, done);
} else {
cc.loader.preload(task.path, done);
}
},
// ------------------------------------------------------------
// 缓存相关
// ------------------------------------------------------------
// 输出当前缓存图片
dumpCacheTextures: function dumpCacheTextures() {
var cnt = 0;
var out = {};
for (var k in cc.assetManager.assets._map) {
var item = cc.assetManager.assets._map[k];
if (item instanceof cc.Texture2D || item instanceof cc.SpriteFrame || item instanceof cc.SpriteAtlas) {
out[k] = item;
++cnt;
}
}
console.log("缓存图片数量:", cnt);
console.log(out);
},
// 输出当前缓存Spine
dumpCacheSpines: function dumpCacheSpines() {
var cnt = 0;
var out = {};
for (var k in cc.assetManager.assets._map) {
var item = cc.assetManager.assets._map[k];
if (item instanceof sp.Skeleton || item instanceof sp.SkeletonData || item instanceof sp.SkeletonTexture) {
out[k] = item;
++cnt;
}
}
console.log("缓存Spine数量:", cnt);
console.log(out);
},
// 输出当前缓存Prefab
dumpCachePrefab: function dumpCachePrefab() {
var cnt = 0;
var out = {};
for (var k in cc.assetManager.assets._map) {
var item = cc.assetManager.assets._map[k];
if (item instanceof cc.Prefab) {
out[k] = item;
++cnt;
}
}
console.log("缓存Prefab数量:", cnt);
console.log(out);
},
// 给cc.loader增加新的扩展文件下载映射
/*
// 定义
nx.res.addDownLoader( "zip", function(item, callback ) {
var url = item.url;
var xhr = cc.Pipeline.getXMLHttpRequest();
xhr.open("GET", url, true);
xhr.responseType = "arraybuffer";
xhr.onload = function (oEvent) {
var arrayBuffer = xhr.response;
if (arrayBuffer) {
var result = new Uint8Array(arrayBuffer);
// 任何需要的处理
callback(null, result);
}
else {
callback(message); // 第一个参数需要传递错误信息
}
}
// 错误处理
xhr.onerror = function( onEvent ) { // 同样需要调用 callback 返回错误信息
console.log( onEvent );
}
xhr.send(null);
} );
// 使用
cc.assetManager.load( "http://..../coms.zip",
function( completedCount, totalCount, item ) {
console.log( " prog:" + completedCount + ":" + totalCount );
},
function( err, zip ) {
console.log( err );
console.log( " size:" + zip.length );
})
*/
addDownLoader: function addDownLoader(_type, _handler) {
if (nx.dt.strEmpty(_type) || !nx.dt.fnGood(_handler)) {
return;
}
cc.assetManager.addDownloadHandlers({
_type: _handler
});
},
// 原生目录创建
_buildFolder: function _buildFolder() {
if (!window.jsb || !window.jsb.fileUtils) {
return;
}
// 原生目录创建
var _build = function _build(_folder) {
var prefix = jsb.fileUtils.getWritablePath() + _folder + "/";
if (!jsb.fileUtils.isDirectoryExist(prefix)) {
jsb.fileUtils.createDirectory(prefix);
}
return prefix;
};
nx.folder = {};
nx.folder.games = _build("assets/games");
nx.folder.log = _build("assets/log");
nx.folder.photos = _build("assets/photos");
nx.folder.voices = _build("assets/voices");
nx.folder.shots = _build("assets/shots");
nx.folder.other = _build("assets/other");
}
});
// 模块导出
module.exports = nxResource;
cc._RF.pop();