public void Act(float delta) { // Update over actors. Done in act() because actors may change position, which can fire enter/exit without an input event. for (int pointer = 0, n = _pointerOverActors.Length; pointer < n; pointer++) { Actor overLast = _pointerOverActors[pointer]; // Check if pointer is gone. if (!_pointerTouched[pointer]) { if (overLast != null) { _pointerOverActors[pointer] = null; Vector2 stageCoords = ScreenToStageCoordinates(new Vector2(_pointerScreen[pointer].X, _pointerScreen[pointer].Y)); // Exit over last TouchEventArgs ev = Pools <TouchEventArgs> .Obtain(); ev.RoutedEvent = TouchLeaveEvent; ev.Stage = this; ev.StagePosition = stageCoords; ev.RelatedActor = overLast; ev.Pointer = pointer; overLast.RaiseEvent(ev); Pools <TouchEventArgs> .Release(ev); } continue; } // Update over actor for the pointer _pointerOverActors[pointer] = FireEnterAndExit(overLast, _pointerScreen[pointer].X, _pointerScreen[pointer].Y, pointer); } // Update over actor the mouse on the desktop // ApplicationType type = Gdx.app.getType(); // if (type == ApplicationType.Desktop || type == ApplicationType.Applet || type == ApplicationType.WebGL) _mouseOverActor = FireEnterAndExit(_mouseOverActor, _mouseScreenX, _mouseScreenY, -1); Root.Act(delta); }