resMgr.ts 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import { ResRelease } from "./resRelease";
  2. export class ResMgr {
  3. private static _inst: ResMgr;
  4. public static get inst(): ResMgr {
  5. if (this._inst == null) {
  6. this._inst = new ResMgr();
  7. }
  8. return this._inst;
  9. }
  10. // 跟随节点释放
  11. loadPrefab(name: string, parent: cc.Node): Promise<cc.Node>{
  12. return new Promise((resolve)=>{
  13. cc.resources.load(name, cc.Prefab, (err, res) => {
  14. if (res) {
  15. let node = cc.instantiate(res);
  16. parent.addChild(node);
  17. res.addRef();
  18. node.addComponent(ResRelease).call = ()=>{
  19. res.decRef();
  20. }
  21. resolve(node);
  22. return;
  23. }
  24. else{
  25. cc.log(err);
  26. }
  27. resolve(null);
  28. });
  29. });
  30. }
  31. getPrefab(name: string): Promise<cc.Prefab> {
  32. return new Promise((resolve)=>{
  33. cc.resources.load(name, cc.Prefab, (err, res) => {
  34. if (res) {
  35. resolve(res);
  36. return;
  37. }
  38. else{
  39. cc.log(err);
  40. }
  41. resolve(null);
  42. });
  43. });
  44. }
  45. createNode(res: cc.Prefab, parent: cc.Node){
  46. let node = cc.instantiate(res);
  47. parent.addChild(node);
  48. res.addRef();
  49. node.addComponent(ResRelease).call = ()=>{
  50. res.decRef();
  51. }
  52. return node;
  53. }
  54. loadAni(name: string, node: cc.Node): Promise<cc.AnimationClip>{
  55. return new Promise((resolve)=>{
  56. cc.resources.load(name, cc.AnimationClip, (err, res) => {
  57. if (res) {
  58. res.addRef();
  59. node.addComponent(ResRelease).call = ()=>{
  60. res.decRef();
  61. }
  62. resolve(res);
  63. return;
  64. }
  65. else{
  66. cc.log(err);
  67. }
  68. resolve(null);
  69. });
  70. });
  71. }
  72. loadAniArr(name: string[], node: cc.Node): Promise<cc.AnimationClip[]>{
  73. return new Promise((resolve)=>{
  74. cc.resources.load(name, cc.AnimationClip, (err, res) => {
  75. if (res) {
  76. res.forEach(v=> v.addRef());
  77. node.addComponent(ResRelease).call = ()=>{
  78. res.forEach(v=> v.decRef());
  79. }
  80. resolve(res);
  81. return;
  82. }
  83. else{
  84. cc.log(err);
  85. }
  86. resolve(null);
  87. });
  88. });
  89. }
  90. }