• Cocos Creator cc.Node.点击事件


    触摸事件

    1.触摸事件的类型:START触摸启动,MOVED移动,ENDED弹起来,CANCEL取消;

    ENDED和CANCEL区别是ENDED物体内弹起来,CANCEL是在物体外范围弹起。

    2.监听触摸事件,node.on(类型,callback,target(回调函数的this),[useCapture])

    3.触摸事件,node.on(类型,callback,target(回调函数的this),[useCapture])

          //(1)监听触摸事件 向引擎底层注册回调函数
        	//当有触摸事件发生等时候,调这个方法
        	//cc.Node.EventType.TOUCH_START 触摸开始
        	
    
        	//(2)回调函数等格式 function(t) t对象是tt.Touch的对象
        	//这个对象包含的信息有[触摸信息,事件信息];
        	
        	//(3)target 目标谁来调等callback 哪个对象来调用等这个callback
        	//那就是哪个对象在callback来绑定实例,target就是里面this对象
        
        	//最后一个参数默认即可
         onLoad: function() {
            this.node.on(cc.Node.EventType.TOUCH_START,
                function(t){console.log("cc.Node.EventType.TOUCH_START ")},this)
            this.node.on(cc.Node.EventType.TOUCH_MOVE,
                function(t){console.log("cc.Node.EventType.TOUCH_MOVE ")},this)
                
            this.node.on(cc.Node.EventType.TOUCH_END,
                function(t){console.log("cc.Node.EventType.TOUCH_END ")},this)
                
            this.node.on(cc.Node.EventType.TOUCH_CANCEL,
                function(t){console.log("cc.Node.EventType.TOUCH_CANCEL ")},this)
         },

    4.如果这时候 不想监听了 就可以通过off来关闭, 但是你的,

    callback不要是匿名函数,要用一个函数对象来保存

        on_touch_moved:function(t){
            console.log("cc.Node.EventType.TOUCH_END ");
        },

    5.关闭注册

        this.node.off(cc.Node.EventType.TOUCH_END,
            this.on_touch_moved ,this)


    6.移除目标上的所有事件

    targetoff(target)

    7.cc.Touch

    getLocation 获取当前触点位置 做下角(0,0)为起始点

    getDelta 获取触点距离上一次事件移动的距离对象,对象包含 x 和 y 属性

    8.cc.Touch 同时包含 cc.Event事件

    父节点移动那么所有的子节点都移动,那也就是("父节点是包含了

    整个子节点的一个整体"),那这个整体其中一个成员收到来一个事件,

    这时候这事件会向上传递,就是说你的一个子节点有一个事件发生后, 

    父节点是可以收到等,这个就叫做事件等向上传递,事件冒泡。

    如果子节点觉得这是一个私有事件,不想向上传递,想挡住这个事件,

    stopPropagationImmediate//立即停止事件传递

    stopPropagation停止传递当前事件。

    9.按键事件

    按键分类:按下EventType.KEY_DOWN,弹起KEY_UP

    注册键盘事件

    注意systemEvent是小写开头,

    大写是类, 

    小写是全局实例 他的说明是:系统事件单例,方便全局使用.

         onLoad: function() {
            //按键被按下
            cc.systemEvent.on(cc.SystemEvent.EventType.KEY_DOWN,
                this.on_key_down,this);
            cc.systemEvent.on(cc.SystemEvent.EventType.KEY_UP,
                this.on_key_up,this);
         },
        on_key_down: function(event){
            //获取按键 每个按键对应一个按键码
            //event对象带有keyCode 按键码
            //按键码在cc.KEY里面定义的
            console.log("按下");
            switch(event.KeyCode){
                case cc.KEY.space:
                    console.log("空格按下");
                break;
            }
        },
        on_key_up: function(event){
             switch(event.KeyCode){
                case cc.KEY.space:
                    console.log("空格弹起");
                break;
            }
        },

    10.自定义事件

    自己定义的事件,比如我要向你发送一个通知.

    监听:this.node.on("自定义事件名",function,target,useCapture);

    触发(派发事件):emit("事件名",[detail]) 只有自己能收到

    冒泡派送:dispatchEvent(new cc.Event.EventCustom("name",是否冒泡传递))

    onLoad:function(){
            //接收者 
            //事件类型是自定义字符串等 为事件名字
            //回调函数 参数Event.EventCustom的实例
            this.node.on("pkg_event",function(e){
                console.log("pkg_event");
                //输出自定义事件传过来等 自定义数据
                console.log(e.detail.name);
            },this);
            //end
            
            //发送者  直接触发事件
            //这种方法不会对事件传播到任何其他对象
            //也就是说这个事件只能传给自己
            //detail Object 事件的详细数据
            //可以传递自定义数据 比如说传一个表
            this.node.emit("pkg_event",{name:"下面"});
            //end
    
        },

    如果我们要把这个事件向上发送

            //如果这个事件要向上传递,也就是不只是传给自己
            ////true向上传递 false不向上传递
            var ea = new cc.Event.EventCustom("pkg_event",true);
            //自定义数据
            ea.detail = {name:"小王"};
            //指定这个事件向上传递 
            this.node.dispatchEvent(ea);
            
            //end

    父节点接收事件 脚本

         onLoad :function() {
            this.node.on("pkg_event",function(e){
                console.log("父节点收到冒泡");
                console.log(e.detail.name);
            },this);
         },
  • 相关阅读:
    cocos2dx打飞机项目笔记七:各种回调:定时器schedule、普通回调callFunc、菜单回调menu_selector、事件回调event_selector
    cocos2dx打飞机项目笔记六:GameScene类和碰撞检测 boundingbox
    [Redis] 手动搭建标准6节点Redis集群(docker)
    [JavaSE 源码分析] 关于HashMap的个人理解
    [leetcode 周赛 150] 1161 最大层内元素和
    [leetcode 周赛 150] 1160 拼写单词
    [leetcode 周赛 149] 1157 子数组中占绝大多数的元素
    [leetcode 周赛 149] 1156 单字符重复子串的最大长度
    [leetcode 周赛 149] 1155 掷骰子的N种方法
    [leetcode 周赛 149] 1154 一年中的第几天
  • 原文地址:https://www.cnblogs.com/luorende/p/9051493.html
Copyright © 2020-2023  润新知