load-remote-plist
load-remote-plist copied to clipboard
3.8该如何修改呢?求更新赐教
3.8该如何修改呢?求更新赐教,感谢
here is the update :
const BRACE_REGEX = /[\{\}]/g;
function parseSize (sizeStr) {
sizeStr = sizeStr.slice(1, -1);
let arr = sizeStr.split(',');
let width = parseFloat(arr[0]);
let height = parseFloat(arr[1]);
return size(width, height);
}
function parseVec2 (vec2Str) {
vec2Str = vec2Str.slice(1, -1);
var arr = vec2Str.split(',');
var x = parseFloat(arr[0]);
var y = parseFloat(arr[1]);
return v2(x, y);
}
function parseRect (rectStr) {
rectStr = rectStr.replace(BRACE_REGEX, '');
let arr = rectStr.split(',');
return rect(
parseFloat(arr[0] || 0),
parseFloat(arr[1] || 0),
parseFloat(arr[2] || 0),
parseFloat(arr[3] || 0),
);
}
function parsePlist (plist, texture: Texture2D) {
let info = plist._file.metadata;
let frames = plist._file.frames;
let atlas = new SpriteAtlas();
let spriteFrames = atlas.spriteFrames;
for (let key in frames) {
let frame = frames[key];
let rotated = false, sourceSize, offsetStr, textureRect;
// let trimmed = frame.trimmed;
if (info.format === 0) {
rotated = false;
// trimmed = frame.trimmed;
sourceSize = `{${frame.originalWidth},${frame.originalHeight}}`;
offsetStr = `{${frame.offsetX},${frame.offsetY}}`;
textureRect = `{{${frame.x},${frame.y}},{${frame.width},${frame.height}}}`;
}
else if (info.format === 1 || info.format === 2) {
rotated = frame.rotated;
// trimmed = frame.trimmed;
sourceSize = frame.sourceSize;
offsetStr = frame.offset;
textureRect = frame.frame;
}
else if (info.format === 3) {
rotated = frame.textureRotated;
// trimmed = frame.trimmed;
sourceSize = frame.spriteSourceSize;
offsetStr = frame.spriteOffset;
textureRect = frame.textureRect;
}
var sprite = new SpriteFrame();
sprite.texture = texture;
sprite.rect = parseRect(textureRect);
sprite.rotated = !!rotated;
sprite.offset = parseVec2(offsetStr);
sprite.originalSize = parseSize(sourceSize);
let name = path.mainFileName(key);
spriteFrames[name] = sprite;
}
return atlas;
}
export function loadRemotePlist(url, callback) {
assetManager.loadRemote(url, function (err, plist) {
if (err) {
return callback(err);
}
let texture = plist._file.metadata.realTextureFileName || plist._file.metadata.textureFileName;
texture = path.join(path.dirname(url), texture);
assetManager.loadRemote(texture, function (err, image) {
if (err) {
return callback(err);
}
const texture = new Texture2D();
texture.image = image;
let atlasSprite = parsePlist(plist, texture);
callback(null, atlasSprite);
});
});
}