Skip to main content

A static class in javascript that can preload images using promises in a async manner so your main thread would not hang or slow down.

as lots of us already know that javascript is a single threaded language but in javascript you can do multiple operation in a single thread async.

async meaning you can run multiple operation in parallel without disturbing main thread  which is mainly UI thread in javascript.


promises is one way to do operation in async manner 

learn more about promises



below is my solution to preload images in a async manner in javascript




//preloading images using javascript
class Loader
{
    constructor()
    {
      this.progressCallBack=undefined;
    }
    //load all images in aysnc manner
      //load multiple images
   static async loadImages(args) {
    //a promiseArray that can hold all Promises 
    let promiseStack = [];
       
    //total images u want to load
    const totalImages = args.length;

    //number of images loading
    let loadedImages = 0;
    for (let i = 0; i < totalImages; i++) {
     
      promiseStack.push(
        new Promise((accept, reject) => {
         const image = new Image();
          image.src = args[i];
          //on each image load progess how many images you loaded yet
          image.onload = evt => {
            loadedImages++;
            const per = Number((loadedImages * 100) / totalImages);
            if (this.progressCallBack) {
              this.progressCallBack(per);
            }
            accept(evt);
          };
          //reject the promise a console back a message when a image failed to load
          image.onerror=evt=>{
            console.warn(`this image is not loaded=>${evt.target.src}`);
          }
        })
      );
    }
    

    //reslove all promise all send send back boolean you can check that all images loaded successfully
    return new Promise((accept, recject) => {
      Promise.all(promiseStack)
        .then(=> {
          accept(true);
        })
        .catch(Error => {
          reject("some images missed")
        });
    });
  }
}
//now load images in a async manner 
  const images=["https://picsum.photos/id/237/200/32",
      "https://picsum.photos/seed/picsum/200/300",
        "https://picsum.photos/200/300?grayscale",
        "https://picsum.photos/200/300/?blur",
        "https://ragingbanana.files.wordpress.com/2015/03/35f7d4fa3fdf5ae46be107004f93497a.png",
"https://www.spottedzebra.us/img/posts/2013-05-20-XAML%20Spritesheet%20Animation/scared-owl-spritesheet.png"
      ]
      Loader.loadImages(images).then((r)=>{
       // console.log(r);
      })
      Loader.progressCallBack=(p)=>{
          this.p=p;
           // console.log(this.p);
      }


    


working link -->


Comments

Popular posts from this blog

Better Memory management with PixiJS or How to manage cpu and cpu memory in PixiJS.

PixiJS is my favorite framework when i am looking for a web games specially for mobile or desktop  PixiJS is fast blazing fast and you can get a decent FPS even on older device.   so here is my optimization techniques for PixiJs 1. manage your sprites in a better way use spritesheet to reduce the draw calls create big sprite sheet which contain multiple sprites can be draw in gpu with a single draw call. use TexturePacker  https://www.codeandweb.com/texturepacker  best tool when its comes to spritesheet 2. for floating point calculation round off calculation for example let  speed = 0.75 ; let  position = 100 ; console . log ( Math . round ( speed * position )) 3. don't create very big canvas when u need a big canvas size game just try to create a small canvas and translate it. 4. its very important one managing TextureCache in memory you can get all TextureCache list by using  Object.entries(PIXI.utils.TextureCache); so even you use ap...

adding particles Effect in pixijs using https://pixijs.io/pixi-particles-editor/

adding particle in pixijs is very easy using the below tool more information can be found below https://github.com/pixijs/pixi-particles https://pixijs.io/pixi-particles-editor/ required packages  /// < reference path = "node_modules/pixi-particles/ambient.d.ts" /> import 'pixi-particles' code of particle delcare a     global variable   private emitter ?: Emitter ; const img = PIXI . Texture . from ( "./assets/images/particle.png" ); this . emitter = new Emitter ( this ,[ img ],{ "alpha" : { "start" : 0.62 , "end" : 0.39 }, "scale" : { "start" : 0.1 , "end" : 0.9 , "minimumScaleMultiplier" : 1.25 }, "color" : { "start" : "#ffff8f" , "end" : ...