替换label控件里的艺术字体 加载远程文件 加载labelAtlas无效

creator 3.8.2版本
远程图片位置
let url_3 = GlobalLanText.lanDownLoadUrl + “hall/texture/bdphone/img_gold.labelatlas”
let url_4 = GlobalLanText.lanDownLoadUrl + “hall/texture/bdphone/img_gold.png”
ExternalFun.loadRemoteLabelatlas(url_3 ,url_4,this.cashlb.getComponent(Label))
public static loadRemoteLabelatlas(remoteAtlasUrl: string,remotePngUrl: string, nodeLabel:Label) {

    const self = this;

    assetManager.loadRemote<LabelAtlas>(remoteAtlasUrl, (err, labelAtlas)=> {

        if (err) {

            console.error('Failed to load LabelAtlas:', err);

            return;

        }

        assetManager.loadRemote<ImageAsset>(remotePngUrl, (err, imageAsset)=> {

            if (err) {

                console.error('Failed to load Texture2D:', err);

                return;

            }

            const spriteFrame = new SpriteFrame();

            const texture = new Texture2D();

            texture.image = imageAsset;

            spriteFrame.texture = texture

            labelAtlas.spriteFrame  = spriteFrame

            nodeLabel.font = labelAtlas;

        });

    });

}

代码执行之后 该nodeLabel本地加载的图片资源被取消 远程资源没有加载上 是LabelAtlas加载的方法有问题么

试试这个

import { js, Label, assetManager, ImageAsset, SpriteFrame, Texture2D, LabelAtlas, path } from "cc";

class FontLetterDefinition {
    public rect = {};
    public u = 0;
    public v = 0;
    public w = 0;
    public h = 0;
    public offsetX = 0;
    public offsetY = 0;
    public textureID = 0;
    public valid = false;
    public xAdvance = 0;
}

interface ILetterDefinition {
    [key: string]: FontLetterDefinition;
}

class FontAtlas {
    public declare letterDefinitions;
    public declare texture;

    constructor(texture) {
        this.letterDefinitions = {};
        this.texture = texture;
    }

    public addLetterDefinitions(letter, letterDefinition): void {
        this.letterDefinitions[letter] = letterDefinition;
    }

    public cloneLetterDefinition(): ILetterDefinition {
        const copyLetterDefinitions: ILetterDefinition = {};
        for (const key of Object.keys(this.letterDefinitions)) {
            const value = new FontLetterDefinition();
            js.mixin(value, this.letterDefinitions[key]);
            copyLetterDefinitions[key] = value;
        }
        return copyLetterDefinitions;
    }

    public getTexture(): any {
        return this.texture;
    }

    public getLetter(key): any {
        return this.letterDefinitions[key];
    }

    public getLetterDefinitionForChar(char, labelInfo?): any {
        const key = char.charCodeAt(0);
        const hasKey = this.letterDefinitions.hasOwnProperty(key);
        let letter;
        if (hasKey) {
            letter = this.letterDefinitions[key];
        } else {
            letter = null;
        }
        return letter;
    }

    public clear(): void {
        this.letterDefinitions = {};
    }
}

export default class RemoteLoader {

    public static loadRemoteLabelatlas(remoteImageUrl: string, label: Label) {
        let fontCount = 6;
        let startChar = '.';

        assetManager.loadRemote<ImageAsset>(remoteImageUrl, (err, imageAsset) => {
            if (err) {
                console.error('Failed to load Texture2D:', err);
                return;
            }

            const spriteFrame = new SpriteFrame();
            const texture = new Texture2D();
            texture.image = imageAsset;
            spriteFrame.texture = texture;

            let labelAtlas = new LabelAtlas('testFont');
            let fntConfig = {
                fontDefDictionary: new FontAtlas(spriteFrame.texture),
                atlasName: path.basename(remoteImageUrl),
                commonHeight: imageAsset.height,
                fontSize: Number((imageAsset.height / (100 / 88)).toFixed(2))
            };

            for (let index = 0; index < fontCount; index++) {
                const letter = new FontLetterDefinition();
                const rect = spriteFrame.rect;
                letter.offsetX = spriteFrame['_offset'].x;
                letter.offsetY = spriteFrame['_offset'].y;
                letter.w = Math.ceil(rect.width / fontCount);
                letter.h = rect.height;
                letter.u = spriteFrame['_trimmedBorder'].x + letter.w * index;
                letter.v = spriteFrame['_trimmedBorder'].y;

                // FIXME: only one texture supported for now
                letter.textureID = 0;
                letter.valid = true;
                letter.rect = {
                    width: letter.w,
                    height: letter.h,
                    x: letter.u,
                    y: letter.v
                }
                letter.xAdvance = letter.w;

                const fontDef = startChar.charCodeAt(0) + index;
                fntConfig.fontDefDictionary.addLetterDefinitions(fontDef, letter);
            }
            labelAtlas.fontDefDictionary = fntConfig.fontDefDictionary;
            labelAtlas.fntConfig = fntConfig;
            labelAtlas.fontSize = labelAtlas.fntConfig.fontSize;
            labelAtlas.spriteFrame = spriteFrame;

            label.font = labelAtlas;
            label.useSystemFont = false;
            label.cacheMode = Label.CacheMode.BITMAP;

        });

    }
}