ResHelper.ts 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import { AppKernel } from "@scripts/app/AppKernel";
  2. import { AssetSlot } from "@scripts/components/AssetSlot";
  3. import { BUNDLE_ID } from "@scripts/define/ResDefine";
  4. import { Sprite, SpriteFrame } from "cc";
  5. const GoodsIconRes = "common/goodsIcon/img_icon";
  6. /**
  7. * 动态加载spriteFrame path和bundle都是空 则为sprite.spriteFrame = null;
  8. * @param sprite
  9. * @param path
  10. * @param bundle
  11. * @returns
  12. */
  13. export async function setSpriteFrame(sprite: Sprite, path?: string, bundle?: string) {
  14. const node = sprite.node;
  15. const slot = node.getComponent(AssetSlot) || node.addComponent(AssetSlot);
  16. if (!path && !bundle) {
  17. slot.changeAsset(null);
  18. sprite.spriteFrame = null;
  19. return;
  20. }
  21. let res: SpriteFrame = null;
  22. const resources = AppKernel.resources;
  23. if (path.startsWith("http")) {
  24. res = await resources.loadRemoteSp(path);
  25. } else {
  26. if (!path.endsWith("/spriteFrame")) path += "/spriteFrame";
  27. res = await resources.load(bundle || BUNDLE_ID.Lobby, path, SpriteFrame);
  28. }
  29. if (!res) return;
  30. if (!sprite.isValid) {
  31. resources.releaseRes(res);
  32. return;
  33. }
  34. res.addRef();
  35. sprite.spriteFrame = res;
  36. slot.changeAsset(res);
  37. return res;
  38. }
  39. export async function setGoodsIcon(sprite: Sprite, type: number, isGCOnly = false) {
  40. const iconPath = isGCOnly ? `${GoodsIconRes}gc` : `${GoodsIconRes}${type}`;
  41. return setSpriteFrame(sprite, `${iconPath}`);
  42. }