constructor(x, y, settings) {
		// call the parent constructor
		super(x, y, settings);

		/**
		 * object can be clicked or not
		 * @type {boolean}
		 * @default true
		 */
		this.isClickable = true;

		/**
		 * Tap and hold threshold timeout in ms
		 * @type {number}
		 * @default 250
		 */
		this.holdThreshold = 250;

		/**
		 * object can be tap and hold
		 * @type {boolean}
		 * @default false
		 */
		this.isHoldable = false;

		/**
		 * true if the pointer is over the object
		 * @type {boolean}
		 * @default false
		 */
		this.hover = false;

		// object has been updated (clicked,etc..)
		this.holdTimeout = -1;
		this.released = true;

		/**
		 * if this UISpriteElement should use screen coordinates or local coordinates
		 * (Note: any UISpriteElement elements added to a floating parent container should have their floating property to false)
		 * @see Renderable.floating
		 * @type {boolean}
		 * @default true
		 */
		this.floating = true;

		// enable event detection
		this.isKinematic = false;
	}
@param {number} x - the x coordinate of the UISpriteElement Object
@param {number} y - the y coordinate of the UISpriteElement Object
@param {object} settings - See {@link Sprite}
@example
// create a basic GUI Object
class myButton extends UISpriteElement {
   constructor(x, y) {
      // call the UISpriteElement parent constructor
      super(x, y, {
         image: "button",
         framewidth: 100,
         frameheight: 50
      });
   }

   // output something in the console
   // when the object is clicked
   onClick(event) {
      console.log("clicked!");
      // don't propagate the event
      return false;
   }
});

// add the object at pos (10,10)
world.addChild(new myButton(10,10));