Загрузчик ресурсов на промисах
- const AssetLoader = (assets) => {
- const loadFile = (url, key) => {
- const ext = url.split('.').pop()
- return new Promise((resolve, reject) => {
- switch (ext) {
- case 'png': case 'jpg': case 'jpeg':
- const img = new Image()
- img.addEventListener('load', () => resolve([key, img]))
- img.addEventListener('error', () => reject(`Image from "${url}" not loaded`))
- img.src = url
- break
- case 'json':
- fetch(url).then(response => response.json())
- .then(object => resolve([key, object]))
- .catch(() => reject(`Json Object from "${url}" not loaded`))
- break
- default:
- reject(`File type "${ext}" is not supported`)
- }
- })
- }
- return new Promise((resolve, reject) => Promise.all(Object.entries(assets).map(([key, url]) => loadFile(url, key)))
- .then(results => {
- resolve(Object.fromEntries(results))
- }).catch(reject)
- )
- }
Просто предзагрузка ресурсов, можно использовать для HTML5 игр. Нет возможности отслеживать прогресс загрузки, не удобно отлавливать ошибки но зато без коллбеков и всяких движков
Использовать как то так:
Использовать как то так:
- AssetLoader({
- ground: 'assets/tilesets/ground.png',
- vegetation: 'assets/tilesets/vegetation.png',
- hero: 'assets/sprites/hero.png',
- world: 'assets/map/outside.json'
- }).then(mainGame)