import { _decorator, Component, Node, ImageAsset, assetManager, SpriteFrame, Texture2D, Sprite } from ‘cc’;
const { ccclass, property } = _decorator;
@ccclass(‘NewComponent’)
export class NewComponent extends Component {
@property({type:Sprite})
sp: Sprite = null;
public whiteBase64src = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAGUlEQVQYlWP8////fwY8gAmf5DBRwMDAAAAbbgQMbCH2PAAAAABJRU5ErkJggg==';
public createSpriteFrameWithBase64 (url: string, base64Src: string): Promise<SpriteFrame> {
return new Promise((resolve, reject) => {
const img = new Image();
const that = this
img.onload = function (info) {
const imageAsset = that.createImageAsset(url, img);
const spf = that.createSpriteFrameWtihImageAsset(imageAsset);
resolve(spf);
};
img.onerror = () => {
reject(null);
};
img.src = base64Src;
});
}
public createImageAsset (url: string, img: HTMLImageElement): ImageAsset {
const imgAsset = new ImageAsset(img);
imgAsset._uuid = url;
assetManager.assets.add(imgAsset._uuid, imgAsset);
imgAsset._nativeUrl = imgAsset._uuid;
assetManager.dependUtil._depends.add(imgAsset._uuid, { deps: [], nativeDep: [] });
return imgAsset;
}
public createTexture2DWtihImageAsset (imgAsset: ImageAsset): Texture2D {
const texture = new Texture2D();
texture.image = imgAsset;
//@ts-ignore
texture._uuid = "bbbbbb";
//@ts-ignore
texture._nativeUrl = '';
//@ts-ignore
assetManager.assets.add(texture._uuid, texture);
assetManager.dependUtil._depends.add(texture._uuid, { deps: [imgAsset._uuid], nativeDep: [] });
return texture;
}
public createSpriteFrameWtihImageAsset (imgAsset: ImageAsset): SpriteFrame {
const texture = this.createTexture2DWtihImageAsset(imgAsset);
const spf = new SpriteFrame();
spf.texture = texture;
spf._uuid = "aaaaa";
spf._nativeUrl = '';
assetManager.assets.add(spf._uuid, spf);
assetManager.dependUtil._depends.add(spf._uuid, { deps: [texture._uuid], nativeDep: [] });
return spf;
}
start() {
this.createSpriteFrameWithBase64("aaaab",this.whiteBase64src).then(v=>{
this.sp.spriteFrame = v;
})
}
update(deltaTime: number) {
}
}