如何创建假投掷效果?

问题描述

| 我正在学习AS3,并且正在尝试建立一些互动关系,以便在舞台上摆出一个正方形。它只需要停留在x轴上即可向左或向右抛出。 我发现了很多涉及物理学的教程。我不需要那么复杂的东西。对于我的游戏,只要您单击正方形并稍稍扔下它,无论扔动作有多困难,正方形都将始终从舞台上抛出,具体取决于鼠标的方向。 我脑子里有种想法,即可以通过动画剪辑中的补间(因为只需要向左或向右)来实现“投掷”的感觉,视鼠标的方向而激活它。 如果这是一个基本问题,我深表歉意,我不知道如何开始。请帮忙!     

解决方法

        尝试将其用作要抛出的对象的基类。
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;
            }
        }
    }
}
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...