constructor(settings) {
		/**
		 * The list of active cameras in this stage.
		 * Cameras will be renderered based on this order defined in this list.
		 * Only the "default" camera will be resized when the window or canvas is resized.
		 * @public
		 * @type {Map<Camera2d>}
		 * @name cameras
		 * @memberof Stage
		 */
		this.cameras = new Map();

		/**
		 * The list of active lights in this stage.
		 * (Note: Canvas Renderering mode will only properly support one light per stage)
		 * @public
		 * @type {Map<Light2d>}
		 * @name lights
		 * @memberof Stage
		 * @see Light2d
		 * @see Stage.ambientLight
		 * @example
		 * // create a white spot light
		 * let whiteLight = new me.Light2d(0, 0, 140, "#fff", 0.7);
		 * // and add the light to this current stage
		 * this.lights.set("whiteLight", whiteLight);
		 * // set a dark ambient light
		 * this.ambientLight.parseCSS("#1117");
		 * // make the light follow the mouse
		 * me.input.registerPointerEvent("pointermove", me.game.viewport, (event) => {
		 *    whiteLight.centerOn(event.gameX, event.gameY);
		 * });
		 */
		this.lights = new Map();

		/**
		 * an ambient light that will be added to the stage rendering
		 * @public
		 * @type {Color}
		 * @name ambientLight
		 * @memberof Stage
		 * @default "#000000"
		 * @see Light2d
		 */
		this.ambientLight = new Color(0, 0, 0, 0);

		/**
		 * The given constructor options
		 * @public
		 * @name settings
		 * @memberof Stage
		 * @type {object}
		 */
		this.settings = Object.assign(default_settings, settings || {});
	}
@param {object} [settings] - The stage` parameters
@param {Camera2d[]} [settings.cameras=[new me.Camera2d()]] - a list of cameras (experimental)
@param {Function} [settings.onResetEvent] - called by the state manager when reseting the object
@param {Function} [settings.onDestroyEvent] - called by the state manager before switching to another state