Skip to main content

Loader

Pre-loading assets

The loader provides a mechanism to preload multiple resources at one time. The loader must be passed to the engine in order to trigger the loading progress bar.

The Loader itself implements Loadable so you can load loaders.

Example: Pre-loading resources for a game

// create a loader
var loader = new ex.Loader();

// create a resource dictionary (best practice is to keep a separate file)
var resources = {
  TextureGround: new ex.Texture("/images/textures/ground.png"),
  SoundDeath: new ex.Sound("/sound/death.wav", "/sound/death.mp3")
};

// loop through dictionary and add to loader
for (var loadable in resources) {
  if (resources.hasOwnProperty(loadable)) {
    loader.addResource(resources[loadable]);
  }
}

// start game
game.start(loader).then(function () {
  console.log("Game started!");
});

Customize the Loader

The loader can be customized to show different, text, logo, background color, and button.

const loader = new ex.Loader([playerTexture]);

// The loaders button text can simply modified using this
loader.playButtonText = 'Start the best game ever';

// The logo can be changed by inserting a base64 image string here

loader.logo = 'data:image/png;base64,iVBORw...';
loader.logoWidth = 15;
loader.logoHeight = 14;

// The background color can be changed like so by supplying a valid CSS color string

loader.backgroundColor = 'red'
loader.backgroundColor = '#176BAA'

// To build a completely new button
loader.startButtonFactory = () => {
    let myButton = document.createElement('button');
    myButton.textContent = 'The best button';
    return myButton;
};

engine.start(loader).then(() => {});

Hierarchy

Index

Constructors

constructor

  • Parameters

    • optionaloptions: LoaderOptions

      Optionally provide options to loader

    Returns Loader

Properties

publicbackgroundColor

backgroundColor: string = '#176BAA'

Gets or sets the background color of the loader as a hex string

publiccanvas

canvas: Canvas = ...

data

data: Loadable<any>[]

Data associated with a loadable

publicengine

engine: Engine<any>

publicevents

events: EventEmitter<any> = ...

publicloadingBarColor

loadingBarColor: Color = Color.White

Gets or sets the color of the loading bar, default is Color.White

publicloadingBarPosition

loadingBarPosition: Vector

Positions the top left corner of the loading bar If not set, the loader automatically positions the loading bar

publiclogo

logo: string = logoImg

publiclogoHeight

logoHeight: number = 118

publiclogoPosition

logoPosition: Vector

Positions the top left corner of the logo image If not set, the loader automatically positions the logo

publiclogoWidth

logoWidth: number = 468

publicplayButtonPosition

playButtonPosition: Vector

Positions the top left corner of the play button. If not set, the loader automatically positions the play button

publicplayButtonText

playButtonText: string = 'Play game'

Get/set play button text

publicscreen

screen: Screen

publicsuppressPlayButton

suppressPlayButton: boolean = false

Accessors

publicplayButtonElement

  • get playButtonElement(): HTMLButtonElement
  • Returns HTMLButtonElement

publicplayButtonRootElement

  • get playButtonRootElement(): HTMLElement
  • Returns HTMLElement

publicprogress

  • get progress(): number
  • Returns the progress of the loader as a number between [0, 1] inclusive.


    Returns number

publicresources

  • get resources(): readonly Loadable<any>[]
  • Returns readonly Loadable<any>[]

Methods

publicaddResource

  • addResource(loadable: Loadable<any>): void
  • Add a resource to the loader to load


    Parameters

    Returns void

publicaddResources

  • addResources(loadables: Loadable<any>[]): void
  • Add a list of resources to the loader to load


    Parameters

    • loadables: Loadable<any>[]

      The list of resources to load

    Returns void

publicareResourcesLoaded

  • areResourcesLoaded(): Promise<void>
  • Returns Promise<void>

publicdispose

  • dispose(): void
  • Clean up generated elements for the loader


    Returns void

publicemit

  • emit<TEventName>(eventName: TEventName, event: LoaderEvents[TEventName]): void
  • emit(eventName: string, event?: any): void

publichidePlayButton

  • hidePlayButton(): void
  • Returns void

publicisLoaded

  • isLoaded(): boolean
  • Returns true if the loader has completely loaded all resources


    Returns boolean

publicload

  • Not meant to be overridden

    Begin loading all of the supplied resources, returning a promise that resolves when loading of all is complete AND the user has interacted with the loading screen


    Returns Promise<Loadable<any>[]>

publicmarkResourceComplete

  • markResourceComplete(): void
  • Returns void

publicoff

  • off<TEventName>(eventName: TEventName, handler: Handler<LoaderEvents[TEventName]>): void
  • off(eventName: string, handler: Handler<unknown>): void
  • off(eventName: string): void

publicon

publiconAfterLoad

  • onAfterLoad(): Promise<void>
  • Overridable lifecycle method, called after loading has completed


    Returns Promise<void>

publiconBeforeLoad

  • onBeforeLoad(): Promise<void>
  • Overridable lifecycle method, called directly before loading starts


    Returns Promise<void>

publiconDraw

  • onDraw(ctx: CanvasRenderingContext2D): void
  • Loader draw function. Draws the default Excalibur loading screen. Override logo, logoWidth, logoHeight and backgroundColor properties to customize the drawing, or just override entire method.


    Parameters

    • ctx: CanvasRenderingContext2D

    Returns void

publiconInitialize

  • onInitialize(engine: Engine<any>): void
  • Called by the engine before loading


    Parameters

    Returns void

onUpdate

  • onUpdate(engine: Engine<any>, elapsedMilliseconds: number): void
  • Optionally override the onUpdate


    Parameters

    • engine: Engine<any>
    • elapsedMilliseconds: number

    Returns void

publiconUserAction

  • onUserAction(): Promise<void>
  • Return a promise that resolves when the user interacts with the loading screen in some way, usually a click.

    It's important to implement this in order to unlock the audio context in the browser. Browsers automatically prevent audio from playing until the user performs an action.


    Returns Promise<void>

publiconce

publicshowPlayButton

  • showPlayButton(): Promise<void>
  • Shows the play button and returns a promise that resolves when clicked


    Returns Promise<void>

publicstartButtonFactory

  • startButtonFactory(): HTMLButtonElement
  • Return a html button element for excalibur to use as a play button


    Returns HTMLButtonElement