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

		/**
		 * The array of renderable children of this entity.
		 * @ignore
		 */
		this.children = [];

		if (settings.image) {
			// set the frame size to the given entity size, if not defined in settings
			settings.framewidth = settings.framewidth || settings.width;
			settings.frameheight = settings.frameheight || settings.height;
			this.renderable = new Sprite(0, 0, settings);
		}

		// Update anchorPoint
		if (settings.anchorPoint) {
			this.anchorPoint.setMuted(settings.anchorPoint.x, settings.anchorPoint.y);
		} else {
			// for backward compatibility
			this.anchorPoint.setMuted(0, 0);
		}

		// set the sprite name if specified
		if (typeof settings.name === "string") {
			this.name = settings.name;
		}

		/**
		 * object type (as defined in Tiled)
		 * @type {string}
		 */
		this.type = settings.type || "";

		/**
		 * object unique ID (as defined in Tiled)
		 * @type {number}
		 */
		this.id = settings.id || "";

		/**
		 * dead/living state of the entity<br>
		 * default value : true
		 * @type {boolean}
		 */
		this.alive = true;

		// initialize the default body
		if (typeof settings.shapes === "undefined") {
			settings.shapes = polygonPool.get(0, 0, [
				vector2dPool.get(0, 0),
				vector2dPool.get(this.width, 0),
				vector2dPool.get(this.width, this.height),
				vector2dPool.get(0, this.height),
			]);
		}

		/**
		 * the entity body object
		 * @type {Body}
		 */
		this.body = new Body(this, settings.shapes, () => {
			return this.onBodyUpdate();
		});

		// resize the entity if required
		if (this.width === 0 && this.height === 0) {
			this.resize(this.body.getBounds().width, this.body.getBounds().height);
		}

		// set the  collision mask and type (if defined)
		this.body.setCollisionMask(settings.collisionMask);
		this.body.setCollisionType(settings.collisionType);

		// disable for entities
		this.autoTransform = false;
	}
@param {number} x - the x coordinates of the entity object
@param {number} y - the y coordinates of the entity object
@param {object} settings - Entity properties, to be defined through Tiled or when calling the entity constructor
<img src="../../images/object_properties.png"/>
@param {number} settings.width - the physical width the entity takes up in game
@param {number} settings.height - the physical height the entity takes up in game
@param {string} [settings.name] - object entity name
@param {string} [settings.id] - object unique IDs
@param {Image|string} [settings.image] - resource name of a spritesheet to use for the entity renderable component
@param {Vector2d} [settings.anchorPoint=0.0] - Entity anchor point
@param {number} [settings.framewidth=settings.width] - width of a single frame in the given spritesheet
@param {number} [settings.frameheight=settings.width] - height of a single frame in the given spritesheet
@param {string} [settings.type] - object type
@param {number} [settings.collisionMask] - Mask collision detection for this object
@param {Rect[]|Polygon[]|Line[]|Ellipse[]} [settings.shapes] - the initial list of collision shapes (usually populated through Tiled)