Laya:将当前节点的鼠标事件委托给舞台或者父节点

2019-06-03  本文已影响0人  一眼就认出你

这样子做的原因:
将当前节点绑定鼠标的按下、移动、抬起事件,当鼠标移动出当前节点范围的时候,发现抬起事件和移动事件失效,所以才讲当前节点的鼠标事件委托给舞台或者父节点以扩大监听范围


代码实现如下:(语言:AS3)=>代码思路解释在文章末尾
当前节点的类

//引入父节点或父节点以上的类
import game.main.view.scene.MainTestView;
public class GridTestNode extends Sprite
{
      public function GridTestNode(){
            addEvent();
      }
      public function addEvent():void{
            this.on(Event.MOUSE_DOWN,this,onMouseDown);
     }
      private function onMouseDown(e:Event):void{   
           //讲当前节点对象传给父节点或父节点以上的类
            MainTestView.Instance.setMoveItem(this,true);
           //console.log("***按下");
      }
     //鼠标移动逻辑
     public function onDragPos(e:Event):void{
           // console.log("***移动");
     }|
     //鼠标抬起逻辑
     public function upMouse():void{
           // console.log("***抬起");
     }    
}

父节点或父节点以上的类

//导入子节点的类
import game.main.view.test.GridTestNode;
public class MainTestView{
     //当前可操作节点的对象
     private var _isMouseMove:Boolean;
     private var _moveItem:GridTestNode;
     public static var instance:MainTestView;
     public function MainTestView(){
        addEvent();
        _isMouseMove=false;
      }
     //单例模式
      static public function get Instance():MainTestView{
         if(instance == null){
               instance = new MainTestView();
         }
         return instance;
      }
     //设置可操作鼠标事件的当前节点对象
     public function setMoveItem(node:GridTestNode=null,isMouseMove:Boolean=false):void{
          this._moveItem=node;
          _isMouseMove=isMouseMove;
     }
     public function addEvent():void{
        Laya.stage.on(Event.MOUSE_MOVE,this,onMouseMove);
        Laya.stage.on(Event.MOUSE_UP,this,onMouseUp);
     }
     private function onMouseMove(e:Event):void{
          if(_isMouseMove){//可操作
                this._moveItem.onDragPos(e);
          }           
    }
    private function onMouseUp(e:Event):void{
          if(_isMouseMove){
              this._moveItem.upMouse();
               _isMouseMove=false;
           }            
     }
}

代码思路解释:

注意:节点之间的相互引用,若有更好想法,记得留言分享哦

上一篇 下一篇

猜你喜欢

热点阅读