ResSprite.ts 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import { EResType, ResBaseAsset } from "./ResBaseAsset";
  2. const { ccclass, menu, disallowMultiple, requireComponent } = cc._decorator;
  3. /**
  4. * 精灵组件,自动管理资源的引用计数
  5. */
  6. @ccclass
  7. @disallowMultiple
  8. @requireComponent(cc.Sprite)
  9. @menu('UI/ResSprite')
  10. export default class ResSprite extends ResBaseAsset<cc.SpriteFrame> {
  11. private _sprite: cc.Sprite = null;
  12. get sprite() { return this._sprite || (this._sprite = this.node?.getComponent(cc.Sprite) || this.node?.addComponent(cc.Sprite)); }
  13. public get spriteFrame() { return this.sprite.spriteFrame; }
  14. protected readonly ResType: EResType = EResType.SpriteFrame;
  15. /**
  16. * 通过 url 设置精灵
  17. * @param bundle
  18. * @param url
  19. * @param extraData
  20. * @param group 加载分组,默认为 ELoadingGroup.dft
  21. * @param priority 优先级越小,越先加载,默认为 0
  22. * @returns
  23. */
  24. setSpriteFrame(bundle: string, url: string, cb?: (asset: cc.SpriteFrame) => void) {
  25. this.loadAsset(bundle, url, cc.SpriteFrame, (asset: cc.SpriteFrame) => {
  26. if (asset && this.sprite && this.sprite.isValid) {
  27. this.sprite.spriteFrame = asset;
  28. cb && cb(asset);
  29. } else {
  30. cb && cb(null);
  31. }
  32. });
  33. }
  34. /**
  35. * 不显示精灵(同时取消 spriteFrame 的设置)
  36. */
  37. unsetSpriteFrame(): void {
  38. this.sprite.spriteFrame = null;
  39. this.resetRes();
  40. }
  41. /**
  42. * 设置精灵的图片尺寸模式
  43. * @param sizeMode
  44. */
  45. setSpriteSizeMode(sizeMode: cc.Sprite.SizeMode) {
  46. this.sprite.sizeMode = sizeMode as number;
  47. }
  48. }