예제 #1
0
        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);
        }