Source: loaders/loader.js

loaders/loader.js

  1. // 修改依赖库应对小程序环境
  2. import ResourceLoader from '../dependencies/resource-loader/lib/';
  3. import { blobMiddlewareFactory } from '../dependencies/resource-loader/lib/middlewares/parsing/blob';
  4. // import ResourceLoader from 'resource-loader';
  5. // import { blobMiddlewareFactory } from 'resource-loader/lib/middlewares/parsing/blob';
  6. import EventEmitter from 'eventemitter3';
  7. import textureParser from './textureParser';
  8. import spritesheetParser from './spritesheetParser';
  9. import bitmapFontParser from './bitmapFontParser';
  10. /**
  11. *
  12. * The new loader, extends Resource Loader by Chad Engler: https://github.com/englercj/resource-loader
  13. *
  14. * ```js
  15. * const loader = PIXI.loader; // PixiJS exposes a premade instance for you to use.
  16. * //or
  17. * const loader = new PIXI.loaders.Loader(); // you can also create your own if you want
  18. *
  19. * const sprites = {};
  20. *
  21. * // Chainable `add` to enqueue a resource
  22. * loader.add('bunny', 'data/bunny.png')
  23. * .add('spaceship', 'assets/spritesheet.json');
  24. * loader.add('scoreFont', 'assets/score.fnt');
  25. *
  26. * // Chainable `pre` to add a middleware that runs for each resource, *before* loading that resource.
  27. * // This is useful to implement custom caching modules (using filesystem, indexeddb, memory, etc).
  28. * loader.pre(cachingMiddleware);
  29. *
  30. * // Chainable `use` to add a middleware that runs for each resource, *after* loading that resource.
  31. * // This is useful to implement custom parsing modules (like spritesheet parsers, spine parser, etc).
  32. * loader.use(parsingMiddleware);
  33. *
  34. * // The `load` method loads the queue of resources, and calls the passed in callback called once all
  35. * // resources have loaded.
  36. * loader.load((loader, resources) => {
  37. * // resources is an object where the key is the name of the resource loaded and the value is the resource object.
  38. * // They have a couple default properties:
  39. * // - `url`: The URL that the resource was loaded from
  40. * // - `error`: The error that happened when trying to load (if any)
  41. * // - `data`: The raw data that was loaded
  42. * // also may contain other properties based on the middleware that runs.
  43. * sprites.bunny = new PIXI.TilingSprite(resources.bunny.texture);
  44. * sprites.spaceship = new PIXI.TilingSprite(resources.spaceship.texture);
  45. * sprites.scoreFont = new PIXI.TilingSprite(resources.scoreFont.texture);
  46. * });
  47. *
  48. * // throughout the process multiple signals can be dispatched.
  49. * loader.onProgress.add(() => {}); // called once per loaded/errored file
  50. * loader.onError.add(() => {}); // called once per errored file
  51. * loader.onLoad.add(() => {}); // called once per loaded file
  52. * loader.onComplete.add(() => {}); // called once when the queued resources all load.
  53. * ```
  54. *
  55. * @see https://github.com/englercj/resource-loader
  56. *
  57. * @class
  58. * @extends module:resource-loader.ResourceLoader
  59. * @memberof PIXI.loaders
  60. */
  61. export default class Loader extends ResourceLoader
  62. {
  63. /**
  64. * @param {string} [baseUrl=''] - The base url for all resources loaded by this loader.
  65. * @param {number} [concurrency=10] - The number of resources to load concurrently.
  66. */
  67. constructor(baseUrl, concurrency)
  68. {
  69. super(baseUrl, concurrency);
  70. EventEmitter.call(this);
  71. for (let i = 0; i < Loader._pixiMiddleware.length; ++i)
  72. {
  73. this.use(Loader._pixiMiddleware[i]());
  74. }
  75. // Compat layer, translate the new v2 signals into old v1 events.
  76. this.onStart.add((l) => this.emit('start', l));
  77. this.onProgress.add((l, r) => this.emit('progress', l, r));
  78. this.onError.add((e, l, r) => this.emit('error', e, l, r));
  79. this.onLoad.add((l, r) => this.emit('load', l, r));
  80. this.onComplete.add((l, r) => this.emit('complete', l, r));
  81. }
  82. /**
  83. * Adds a default middleware to the PixiJS loader.
  84. *
  85. * @static
  86. * @param {Function} fn - The middleware to add.
  87. */
  88. static addPixiMiddleware(fn)
  89. {
  90. Loader._pixiMiddleware.push(fn);
  91. }
  92. /**
  93. * Destroy the loader, removes references.
  94. */
  95. destroy()
  96. {
  97. this.removeAllListeners();
  98. this.reset();
  99. }
  100. }
  101. // Copy EE3 prototype (mixin)
  102. for (const k in EventEmitter.prototype)
  103. {
  104. Loader.prototype[k] = EventEmitter.prototype[k];
  105. }
  106. Loader._pixiMiddleware = [
  107. // parse any blob into more usable objects (e.g. Image)
  108. blobMiddlewareFactory,
  109. // parse any Image objects into textures
  110. textureParser,
  111. // parse any spritesheet data into multiple textures
  112. spritesheetParser,
  113. // parse bitmap font data into multiple textures
  114. bitmapFontParser,
  115. ];
  116. // Add custom extentions
  117. const Resource = ResourceLoader.Resource;
  118. Resource.setExtensionXhrType('fnt', Resource.XHR_RESPONSE_TYPE.DOCUMENT);