使用MouseEnabled后,在舞台上停止工作的ActionScript3

时间:2016-12-14 13:49:15

标签: actionscript-3

我尝试使用ActionScript 3进行BattleShip Flash游戏。

1-我使用com.Battleship.grid(类:gridCell:movieClip

绘制网格(类:com.battleship.GridCell

2-我画了一艘船(班级:com.battleship.Bateau

我的目标是当我将船拖到网格时,鼠标下方的alpha单元格会发生变化,如果我放下:

1-如果droptarget是gridCell,则发生船舶(工作正常)

2-如果droptarget是stage,则船返回originPosition(不工作)

我的问题:在我使用MouseEnabled= false之后,船可以掉落在网格上,但不在舞台上并且仍在拖动。

这是我的代码:

var grid:Grid = new Grid(10,new Point(20,20));
var b1:Bateau = new Bateau();
b1.x = 490;
b1.y = 300;
b1.originPos = new Point(b1.x,b1.y);    
addChild(b1)
addChild(grid);

package com.battleship  {

    import flash.display.MovieClip;
    import flash.events.MouseEvent;
    import flash.geom.Point;
    import flash.events.Event;


    public class Bateau extends MovieClip {

        private var _originPos:Point;

        public function Bateau() {
            originPos = new Point();
            buttonMode = true;
            addEventListener(MouseEvent.MOUSE_DOWN, onDrag);

        }
        protected function onDrag(e:MouseEvent):void
        {
            e.currentTarget.parent.addChild(e.currentTarget);
            e.currentTarget.startDrag();
            e.currentTarget.mouseEnabled = false;
            //e.currentTarget.mouseChildren = false;
            addEventListener(MouseEvent.MOUSE_UP, onDrop);
            parent.addEventListener(MouseEvent.MOUSE_UP, onDrop);
        }
        protected function onDrop(e:MouseEvent):void
        {
            e.currentTarget.mouseEnabled = true;
            e.currentTarget.mouseChildren = true;
            e.currentTarget.stopDrag();
            if(dropTarget == null){
                x = originPos.x;
                y = originPos.y;
            }else{
                trace(e.currentTarget.name);
                if(dropTarget.parent is GridCell)
                {
                    x = dropTarget.parent.x+20;
                    y = dropTarget.parent.y;
                }
            }           
        }
        public function get originPos():Point
        {
            return _originPos;
        }
        public function set originPos(originPos:Point):void
        {
            _originPos = originPos;
        }
    }

}

    package com.battleship  {

    import flash.display.MovieClip;
    import flash.events.MouseEvent;


    public class GridCell extends MovieClip {
        private var _row:int;
        private var _col:int;
        private var _val:int;

        public function GridCell()
        {
            addEventListener(MouseEvent.CLICK,onClick);
            addEventListener(MouseEvent.MOUSE_OVER,onMouseOver);
            addEventListener(MouseEvent.MOUSE_OUT,onMouseOut);
        }

        public function onClick(e:MouseEvent)
        {
            //trace("(" + e.currentTarget.row+ ", " + e.currentTarget.col + ")");
            trace(e.currentTarget.name);
        }

        public function onMouseOver(e:MouseEvent)
        {
            alpha = 0.6;
        }

        public function onMouseOut(e:MouseEvent)
        {
            alpha = 1;
        }

        public function get row():int
        {
            return _row;
        }
        public function set row(row:int):void
        {
            _row = row;
        }
        public function get col():int
        {
            return _col;
        }
        public function set col(col:int):void
        {
            _col = col;
        }
        public function get val():int
        {
            return _val;
        }
        public function set val(val:int):void
        {
            _val = val;
        }
    }

}

package com.battleship  {
    import flash.geom.Point;
    import flash.display.Sprite;
    import flash.events.MouseEvent;

    public class Grid extends Sprite {      
        private var _size:int;
        private var _position:Point;

        public function Grid(size:int,position:Point):void
        {
            _size = size;
            _position = position;
            var gridCells:Array = new Array(size,size);
            var i,j:int;
            for(i=0;i<size;i++)
            {
                gridCells[i] = new Array();
                for(j=0;j<size;j++)
                {
                    var cell:GridCell = new GridCell();
                    cell.row = j+1;
                    cell.col = i+1;
                    cell.x = this.position.x + cell.width * (i+1);
                    cell.y = this.position.x + cell.height * (j+1);
                    cell.name = "cell" + (j+1) + (i+1);
                    //cell.addEventListener(MouseEvent.CLICK,onClick);
                    gridCells[i][j] = cell;
                    this.addChild(gridCells[i][j]);
                }

            }
        }

        public function get size():int
        {
            return _size;
        }
        public function set size(size:int):void
        {
            _size = size;
        }
        public function get position():Point
        {
            return _position;
        }
        public function set position(position:Point):void
        {
            _position = position;
        }

    }

}

0 个答案:

没有答案