constructor(width, height, options) {
		/**
		 * the parent HTML element holding the main canvas of this application
		 * @type {HTMLElement}
		 */
		this.parentElement = undefined;

		/**
		 * a reference to the active Canvas or WebGL active renderer renderer
		 * @type {CanvasRenderer|WebGLRenderer}
		 */
		this.renderer = undefined;

		/**
		 * the active stage "default" camera
		 * @type {Camera2d}
		 */
		this.viewport = undefined;

		/**
		 * a reference to the game world, <br>
		 * a world is a virtual environment containing all the game objects
		 * @type {World}
		 */
		this.world = undefined;

		/**
		 * when true, all objects will be added under the root world container.<br>
		 * When false, a `me.Container` object will be created for each corresponding groups
		 * @type {boolean}
		 * @default true
		 */
		this.mergeGroup = true;

		/**
		 * Last time the game update loop was executed. <br>
		 * Use this value to implement frame prediction in drawing events,
		 * for creating smooth motion while running game update logic at
		 * a lower fps.
		 * @type {DOMHighResTimeStamp}
		 */
		this.lastUpdate = 0;

		/**
		 * true when this app instance has been initialized
		 * @type {boolean}
		 * @default false
		 */
		this.isInitialized = false;

		/**
		 * the given settings used when creating this application
		 * @type {ApplicationSettings}
		 */
		this.settings = undefined;

		/**
		 * Specify whether to pause this app when losing focus
		 * @type {boolean}
		 * @default true
		 * @example
		 *  // keep the default game instance running even when loosing focus
		 *  me.game.pauseOnBlur = false;
		 */
		this.pauseOnBlur = true;

		/**
		 * Specify whether to unpause this app when gaining back focus
		 * @type {boolean}
		 * @default true
		 */
		this.resumeOnFocus = true;

		/**
		 * Specify whether to stop this app when losing focus
		 * @type {boolean}
		 * @default false
		 */
		this.stopOnBlur = false;

		// to know when we have to refresh the display
		this.isDirty = true;

		// always refresh the display when updatesPerSecond are lower than fps
		this.isAlwaysDirty = false;

		// frame counter for frameSkipping
		// reset the frame counter
		this.frameCounter = 0;
		this.frameRate = 1;

		// time accumulation for multiple update calls
		this.accumulator = 0.0;
		this.accumulatorMax = 0.0;
		this.accumulatorUpdateDelta = 0;

		// min update step size
		this.stepSize = 1000 / 60;
		this.updateDelta = 0;
		this.lastUpdateStart = null;
		this.updateAverageDelta = 0;

		// when using the default game application, legacy is set to true
		// and init is called through the legacy video.init() call
		if (options.legacy !== true) {
			this.init(width, height, options);
		}
	}
@param {number} width - The width of the canvas viewport
@param {number} height - The height of the canvas viewport
@param {ApplicationSettings} [options] - The optional parameters for the application and default renderer
@throws Will throw an exception if it fails to instantiate a renderer