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

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


代码实现如下:(语言: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;
           }            
     }
}

代码思路解释:

  • 当前节点绑定鼠标按下事件,并且将当前节点对象传给父节点对象;同时,写出鼠标的移动和抬起逻辑给父节点调用
  • 父节点类中,给舞台绑定(也可以给当前类绑定,视监听范围大小确定)鼠标的移动和抬起事件,当鼠标移动的时候,判断_isMouseMove类确定是否可操作,若可以操作则通过传过来的子节点对象来调用子节点定义的移动和抬起逻辑函数

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 3,752评论 1 11
  • Dom事件 事件是一种异步编程的实现方式,本质上是程序各个组成部分之间的通信。DOM支持大量的事件 (一) Eve...
    woow_wu7阅读 1,929评论 0 1
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,825评论 1 32
  • 事件是一种异步编程的实现方式,本质上是程序各个组成部分之间的通信。DOM支持大量的事件,本节介绍DOM的事件编程。...
    许先生__阅读 1,055评论 0 3
  • (续jQuery基础(1)) 第5章 DOM节点的复制与替换 (1)DOM拷贝clone() 克隆节点是DOM的常...
    凛0_0阅读 1,565评论 0 8

友情链接更多精彩内容