load-remote-plist icon indicating copy to clipboard operation
load-remote-plist copied to clipboard

3.8该如何修改呢?求更新赐教

Open AnkoGo123 opened this issue 1 year ago • 1 comments

3.8该如何修改呢?求更新赐教,感谢

AnkoGo123 avatar Aug 19 '23 11:08 AnkoGo123

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);
            });
        });
    }

nguyenhose avatar Jun 24 '24 10:06 nguyenhose