HeadIcon.ts 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import { _decorator, Sprite, SpriteFrame} from 'cc';
  2. import { ch } from '../../ch/ch';
  3. class HeadIcon {
  4. private _map:Map<string,SpriteFrame>=new Map();
  5. private _map_uid:Map<Sprite,string>=new Map();
  6. constructor(){
  7. }
  8. public async showIcon(uid:string,remoteUrl:string,sp:Sprite=null,def?:SpriteFrame):Promise<SpriteFrame>{
  9. if(!remoteUrl || remoteUrl=="image"){
  10. if(sp)sp.spriteFrame=def;
  11. return;
  12. }
  13. if(this._map.has(uid)){
  14. const spr=this._map.get(uid);
  15. if(sp)sp.spriteFrame=spr;
  16. return spr;
  17. }else{
  18. const map=this._map;
  19. const map_uid=this._map_uid;
  20. if(sp && sp.isValid ) map_uid.set(sp,uid);
  21. const spriteFrame = await ch.util.loadImage(remoteUrl);
  22. if(sp && sp.isValid )if(map_uid.get(sp)==uid)sp.spriteFrame=spriteFrame;
  23. map.set(uid,spriteFrame);
  24. return spriteFrame;
  25. }
  26. }
  27. public clean():void{
  28. this._map.clear();
  29. this._map_uid.clear();
  30. }
  31. }
  32. export default function get_new_head_icon():HeadIcon { return new HeadIcon();}