簡體   English   中英

在Flash / AS3中扔一個按鈕

[英]Throwing a button in Flash / AS3

我正在嘗試使按鈕可拖動並將其拖到屏幕上。 我知道我必須為該按鈕使用mouseDown和mouseUp選項,但是有人可以解釋一種允許我先拖動然后將其拋出的方法嗎? 換句話說,它應該繼續跟隨mouseUp。

預先感謝您提供的任何建議-克里斯

有趣的是,我在這附近有個老班。 只需將以下內容用作您想要能夠拋出的任何對象的基類:

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

    /**
     * Use as a base class for objects to be grabbed and thrown with the mouse.
     * @author Marty Wallace.
     * @version 1.01.
     */
    public class BouncingObject 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;

        protected var bounce:Number = 0.3;
        protected var weight:Number = 3;
        protected var friction:Number = 2;


        /**
         * Constructor
         */
        public function BouncingObject()
        {
            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
        {
            removeEventListener(Event.ADDED_TO_STAGE, _init);

            addEventListener(Event.ENTER_FRAME, _handle);
            addEventListener(MouseEvent.MOUSE_DOWN, _handleClick);
            addEventListener(MouseEvent.MOUSE_UP, _handleRelease);
            addEventListener(MouseEvent.MOUSE_OUT, _handleRelease);
        }


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

            yv += weight;

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

            if(x < 0)
            {
                x = 0;
                xv = -xv*bounce;
                yv -= yv / friction;
            }
            if(x + width > stage.stageWidth)
            {
                x = stage.stageWidth - width;
                xv = -xv*bounce;
                yv -= yv / friction;
            }
            if(y < 0)
            {
                y = 0;
                yv = -yv*bounce;
                xv -= xv / friction;
            }
            if(y + height > stage.stageHeight)
            {
                y = stage.stageHeight - height;
                yv = -yv*bounce;
                xv -= xv / friction;
            }
        }


        /**
         * 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;
            }
        }


        /**
         * Deconstructor - remove event listeners.
         */
        public function deconstruct():void
        {
            removeEventListener(Event.ENTER_FRAME, _handle);
            removeEventListener(MouseEvent.MOUSE_DOWN, _handleClick);
            removeEventListener(MouseEvent.MOUSE_UP, _handleRelease);
            removeEventListener(MouseEvent.MOUSE_OUT, _handleRelease);
        }

    }
}

隨意更改您需要的任何內容,例如將weight設置為0將防止物體掉落。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM