ResHelper.ts 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  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. /**
  6. * 动态加载spriteFrame path和bundle都是空 则为sprite.spriteFrame = null;
  7. * @param sprite
  8. * @param path
  9. * @param bundle
  10. * @returns
  11. */
  12. export async function setSpriteFrame(sprite: Sprite, path?: string, bundle?: string) {
  13. const node = sprite.node;
  14. const slot = node.getComponent(AssetSlot) || node.addComponent(AssetSlot);
  15. if (!path && !bundle) {
  16. slot.changeAsset(null);
  17. sprite.spriteFrame = null;
  18. return;
  19. }
  20. let res: SpriteFrame = null;
  21. const resources = AppKernel.resources;
  22. if (path.startsWith("http")) {
  23. res = await resources.loadRemoteSp(path);
  24. } else {
  25. res = await resources.load(bundle || BUNDLE_ID.Lobby, path, SpriteFrame);
  26. }
  27. if (!res) return;
  28. if (!sprite.isValid) {
  29. resources.releaseRes(res);
  30. return;
  31. }
  32. res.addRef();
  33. sprite.spriteFrame = res;
  34. slot.changeAsset(res);
  35. return res;
  36. }