Как создать эффект фальшивого броска? - PullRequest
0 голосов
/ 22 июня 2011

Я изучаю AS3 и пытаюсь создать небольшое взаимодействие, в котором я могу выбросить квадрат со сцены. Нужно просто остаться на оси X, чтобы быть брошенным влево или вправо.

Я нашел довольно много уроков, где речь идет о физике. Мне не нужно ничего сложного. С моим, пока вы нажимаете на квадрат и бросаете его немного, не имеет значения, насколько сложно это бросающее действие, квадрат всегда будет отбрасываться со сцены, в зависимости от направления вашей мыши.

У меня вроде как в голове возникла мысль, что ощущение "броска" может быть выполнено с анимацией движения в видеоклипе (поскольку его нужно только перемещать влево или вправо), который будет активирован в зависимости от направления мышь.

Прошу прощения, если это основной вопрос, я понятия не имею, с чего начать. Пожалуйста, помогите!

1 Ответ

1 голос
/ 22 июня 2011

Попробуйте использовать это как базовый класс для объекта, который вы хотите бросить.

package
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;

    public class ThrowableObject extends Sprite
    {
        // properties
        public var yv:Number = 0;
        public var xv:Number = 0;

        private var _grabbed:Boolean = false;
        private var _gy:int = 0;
        private var _gx:int = 0;

        private var ox:int = 0;
        private var oy:int = 0;

        /**
         * Constructor
         */
        public function ThrowableObject()
        {
            addEventListener(Event.ADDED_TO_STAGE, _init);
        }

        /**
         * Called on dispatch of Event.ADDED_TO_STAGE
         * @param e Event.ADDED_TO_STAGE
         */
        private function _init(e:Event):void
        {
            addEventListener(Event.ENTER_FRAME, _handle);
            addEventListener(MouseEvent.MOUSE_DOWN, _handleClick);
            stage.addEventListener(MouseEvent.MOUSE_UP, _handleRelease);
        }

        /**
         * Called on dispatch of Event.ENTER_FRAME
         * @param e Event.ENTER_FRAME
         */
        private function _handle(e:Event):void
        {
            ox = x;
            oy = y;

            if(_grabbed)
            {
                x = parent.mouseX - _gx;
                y = parent.mouseY - _gy;
            }
            else
            {
                x += xv;
                y += yv;
            }
        }

        /**
         * Called on dispatch of MouseEvent.MOUSE_DOWN
         * @param e MouseEvent.MOUSE_DOWN
         */
        private function _handleClick(e:MouseEvent):void
        {
            grabbed = true;
            parent.addChild(this);
        }

        /**
         * Called on dispatch of MouseEvent.MOUSE_UP
         * @param e MouseEvent.MOUSE_UP
         */
        private function _handleRelease(e:MouseEvent):void
        {
            grabbed = false;
        }

        /**
         * Sets grabbed
         * @param val Boolean representing value to set grabbed as
         */
        protected function set grabbed(bool:Boolean):void
        {
            _grabbed = bool;

            if(_grabbed)
            {
                _gx = mouseX;
                _gy = mouseY;
            }
            else
            {
                xv = x - ox;
                yv = y - oy;
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...