Загрузчик ресурсов на промисах

  1. const AssetLoader = (assets) => {
  2.   const loadFile = (url, key) => {
  3.     const ext = url.split('.').pop()
  4.     return new Promise((resolve, reject) => {
  5.       switch (ext) {
  6.         case 'png': case 'jpg': case 'jpeg':
  7.           const img = new Image()
  8.           img.addEventListener('load', () => resolve([key, img]))
  9.           img.addEventListener('error', () => reject(`Image from "${url}" not loaded`))
  10.           img.src = url
  11.           break
  12.         case 'json':
  13.           fetch(url).then(response => response.json())
  14.             .then(object => resolve([key, object]))
  15.             .catch(() => reject(`Json Object from "${url}" not loaded`))
  16.           break
  17.         default:
  18.           reject(`File type "${ext}" is not supported`)
  19.       }
  20.     })
  21.   }
  22.   return new Promise((resolve, reject) => Promise.all(Object.entries(assets).map(([key, url]) => loadFile(url, key)))
  23.     .then(results => {
  24.       resolve(Object.fromEntries(results))
  25.     }).catch(reject)
  26.   )
  27. }
Просто предзагрузка ресурсов, можно использовать для HTML5 игр. Нет возможности отслеживать прогресс загрузки, не удобно отлавливать ошибки но зато без коллбеков и всяких движков
Использовать как то так:
  1. AssetLoader({
  2.   ground: 'assets/tilesets/ground.png',
  3.   vegetation: 'assets/tilesets/vegetation.png',
  4.   hero: 'assets/sprites/hero.png',
  5.   world: 'assets/map/outside.json'
  6. }).then(mainGame)

Реклама

Мы в соцсетях

tw tg yt gt