constructor(x, y, settings) {
		// call the parent constructor
		super(x, y, settings.width || 0, settings.height || 0);

		/**
		 * Set the default text alignment (or justification),<br>
		 * possible values are "left", "right", and "center".
		 * @public
		 * @type {string}
		 * @default "left"
		 */
		this.textAlign = settings.textAlign || "left";

		/**
		 * Set the text baseline (e.g. the Y-coordinate for the draw operation), <br>
		 * possible values are "top", "hanging, "middle, "alphabetic, "ideographic, "bottom"<br>
		 * @public
		 * @type {string}
		 * @default "top"
		 */
		this.textBaseline = settings.textBaseline || "top";

		/**
		 * Set the line spacing height (when displaying multi-line strings). <br>
		 * Current font height will be multiplied with this value to set the line height.
		 * @public
		 * @type {number}
		 * @default 1.0
		 */
		this.lineHeight = settings.lineHeight || 1.0;

		/**
		 * the maximum length in CSS pixel for a single segment of text.
		 * (use -1 to disable word wrapping)
		 * @public
		 * @type {number}
		 * @default -1
		 */
		this.wordWrapWidth = settings.wordWrapWidth || -1;

		/**
		 * the text to be displayed
		 * @private
		 */
		this._text = [];

		/**
		 * scaled font size
		 * @private
		 */
		this.fontScale = vector2dPool.get(1.0, 1.0);

		/**
		 * font image
		 * @private
		 */
		this.fontImage =
			typeof settings.font === "object"
				? settings.font
				: getImage(settings.font);

		if (typeof settings.fontData !== "string") {
			/**
			 * font data
			 * @private
			 */
			// use settings.font to retreive the data from the loader
			this.fontData = bitmapTextDataPool.get(getBinary(settings.font));
		} else {
			this.fontData = bitmapTextDataPool.get(
				// if starting/includes "info face" the whole data string was passed as parameter
				settings.fontData.includes("info face")
					? settings.fontData
					: getBinary(settings.fontData),
			);
		}

		// if floating was specified through settings
		if (typeof settings.floating !== "undefined") {
			this.floating = !!settings.floating;
		}

		// apply given fillstyle
		if (typeof settings.fillStyle !== "undefined") {
			this.fillStyle = settings.fillStyle;
		}

		// update anchorPoint if provided
		if (typeof settings.anchorPoint !== "undefined") {
			this.anchorPoint.set(settings.anchorPoint.x, settings.anchorPoint.y);
		} else {
			this.anchorPoint.set(0, 0);
		}

		// instance to text metrics functions
		this.metrics = new TextMetrics(this);

		// resize if necessary
		if (typeof settings.size === "number" && settings.size !== 1.0) {
			this.resize(settings.size);
		}

		// set the text
		this.setText(settings.text);
	}
@param {number} x - position of the text object
@param {number} y - position of the text object
@param {object} settings - the text configuration
@param {string|Image} settings.font - a font name to identify the corresponing source image
@param {string} [settings.fontData=settings.font] - the bitmap font data corresponding name, or the bitmap font data itself
@param {number} [settings.size] - size a scaling ratio
@param {Color|string} [settings.fillStyle] - a CSS color value used to tint the bitmapText (@see BitmapText.tint)
@param {number} [settings.lineWidth=1] - line width, in pixels, when drawing stroke
@param {string} [settings.textAlign="left"] - horizontal text alignment
@param {string} [settings.textBaseline="top"] - the text baseline
@param {number} [settings.lineHeight=1.0] - line spacing height
@param {Vector2d} [settings.anchorPoint={x:0.0, y:0.0}] - anchor point to draw the text at
@param {number} [settings.wordWrapWidth] - the maximum length in CSS pixel for a single segment of text
@param {(string|string[])} [settings.text] - a string, or an array of strings
@example
// Use me.loader.preload or me.loader.load to load assets
me.loader.preload([
    { name: "arial", type: "binary" src: "data/font/arial.fnt" },
    { name: "arial", type: "image" src: "data/font/arial.png" },
])
// Then create an instance of your bitmap font:
let myFont = new me.BitmapText(x, y, {font:"arial", text:"Hello"});
// two possibilities for using "myFont"
// either call the draw function from your Renderable draw function
myFont.draw(renderer, "Hello!", 0, 0);
// or just add it to the word container
me.game.world.addChild(myFont);