事件与用户交互

Posted jasonchow1990

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了事件与用户交互相关的知识,希望对你有一定的参考价值。

1.事件消息机制

  •  egret引擎中提供了与js一样的事件处理系统,并且在此基础上还提供了一个事件处理对象,通过一整套的事件处理机制,可以方便的响应用户交互输入与系统事件。
    • 事件处理的例子
public constructor() {
        super();
        this.addEventListener(egret.Event.ADDED_TO_STAGE, this.onAddToStage, this);
    }

    private onAddToStage(event: egret.Event) {
      console.log(‘舞台加载完毕‘)
  }
    • 上面的例子描述了当舞台被加载入场景时的触发事件机制。当程序侦听到有显示对象加入舞台后,创建egret.event对象来派发egret.Event。
    • 我们在类中定义了一个私有函数onAddToStage(),用于执行事件出发后的相关动作。

2.事件类

  • 事件类是承载事件信息以及一些事件处理方法的对象,每个事件都有关联的事件类型。
  • 事件类型以字符串的形式存储在Egret.Event.type属性中
  • 常见的事件对象,有如下:
    • 触摸事件 egret.TouchEvent
    • 声音事件 egret.SoundEvent
    • 定时事件 egret.TimeEvent
    • 文本事件 egret.TextEvent
    • 网络加载状态事件 egret.HTTPStatusEvent
    • I/O错误事件 egret.IOEvent等等

3.创建侦听器

  • 要想使一个对象侦听某个事件,首先要使用addEventListener方法来注册事件侦听器。
事件接受对象.addEventListener(事件类.事件类型,事件处理函数,事件处理函数的this对象);

function 事件处理函数(事件实例:事件类){
  //响应函数中的代码
}
 1 private createGameScene() {
 2        //定义一个矢量图
 3        var circle:egret.Shape = new egret.Shape();
 4        //开始绘制图形,并且设置填充颜色
 5        circle.graphics.beginFill(0x871F78);
 6        //绘制圆形
 7        circle.graphics.drawCircle(200,200,200);
 8        //结束绘制
 9        circle.graphics.endFill();
10        //添加到显示列表中去
11        this.addChild(circle)
12        //定义一个textField文件对象
13        var msg:egret.TextField = new egret.TextField();
14        //添加到显示列表中去
15        this.addChild(msg);
16        //设置文本内容
17        msg.text=‘点击圆形图案‘
18        //设置文本的y轴距离顶部400,刚好在圆形的下方
19        msg.y=400;
20        //设置circle可被点击
21        circle.touchEnabled = true
22        //声明一个点击的次数的变量
23        var num:number = 0
24        //给circle绑定点击事件
25        circle.addEventListener(egret.TouchEvent.TOUCH_TAP,
26        function(){
27            console.log(‘有人点了我.‘);
28            //让num每点击一次,num就+1
29            num++;
30            //让msg文本显示出num值
31            msg.text = ‘图片被点击了 ‘+num.toString()+‘ 次‘;
32        },this);

4.移除侦听器

  • 删除不再使用的侦听器
事件接受对象.removeEventListener(事件类.事件类型,事件处理函数,事件处理函数的this对象);

  //解除绑定侦听器
  circle.addEventListener(egret.TouchEvent.TOUCH_TAP,this.touchHandler,this);
  }
  private touchHandler(e:egret.TouchEvent){
  var c:egret.Shape = <egret.Shape>e.target;
  console.log(‘图案被点击了!‘)
  c.removeEventListener(egret.TouchEvent.TOUCH_TAP,this.touchHandler,this);
  }

    • 注意一定要确保移除侦听器的对象,已经绑定了侦听器。
if(c.hasEventListener(egret.TouchEvent.TOUCH_TAP)){
         c.removeEventListener(egret.TouchEvent.TOUCH_TAP,this.touchHandler,this);       
}

 

    • 移除显示对象也需要确定其已经在显示列表中。

 

以上是关于事件与用户交互的主要内容,如果未能解决你的问题,请参考以下文章

前端防扒代码片段

前端防扒代码片段

前端防扒代码片段

前端防扒代码片段

优维低代码:事件与交互

事件与用户交互