教程目录
一 实现原理
二 代码
三 Demo下载

一 实现原理
监听设备旋转角度的变化,来判断用户是否摇动手机。

参考:
智能手机里陀螺仪和重力感应有何区别?
HTML5实现摇一摇的功能
Egret官方陀螺仪教程

二 代码
摇一摇工具类ShakeTool使用范例

[Actionscript3] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
private shakeTest(){
        this.shakeTool = new ShakeTool();
        this.shakeTool.addEventListener(egret.Event.CHANGE, this.onChange,this);
        this.shakeTool.start();
}
 
private onChange(e:egret.Event){
       var data = e.data;
       //用户大概晃动了手机2-3次
       if(data.shakeCount > 6){
                egret.log("摇一摇完成");
                 this.shakeTool.stop();
        }
}

ShakeTool源码

[Actionscript3] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/**
 * 摇一摇工具类
 * @author chenkai
 * [url=home.php?mod=space&uid=81950]@since[/url] 2017/4/20
 */
class ShakeTool extends egret.EventDispatcher{
        private orientation:egret.DeviceOrientation; //设备方向变化
        private xAngle: number = 0;     //设备绕x角度
        private yAngle: number = 0;     //设备绕y角度
        private zAngle: number = 0;     //设备绕z角度
        private last_x: number = 0;     //上一次绕x角度
        private last_y: number = 0;     //上一次绕y角度
        private last_z: number = 0;     //上一次绕z角度
        private shakeCount: number = 0; //摇动次数
        private lastTime:number = 0;    //上一次更新时间
        private shakeAngle:number = 45; //当晃动角度大于一定角度时,算摇动一次
 
        public constructor(){
                super();
        }
 
        /**开始 */
        public start(){
                //重置数据
                this.shakeCount = 0;
                this.lastTime = 0;
                this.last_x = 0;
                this.last_y = 0;
                this.last_z = 0;
 
                //开始监听
                this.orientation || (this.orientation = new egret.DeviceOrientation());
                this.orientation.addEventListener(egret.Event.CHANGE,this.onOrientation,this);
                this.orientation.start();
        }
 
        /**停止 */
        public stop(){
                if(this.orientation){
                        this.orientation.removeEventListener(egret.Event.CHANGE,this.onOrientation,this);
                        this.orientation.stop();
                }
        }
 
        private onOrientation(e: egret.OrientationEvent) {
                var curTime:number = egret.getTimer();
 
                //每100ms判断一次
                if(curTime - this.lastTime > 100){
                        this.lastTime = curTime;
 
                        this.xAngle = e.beta;   //x轴
                        this.yAngle = e.gamma;  //y轴
                        this.zAngle = e.alpha ; //z轴
 
                        //旋转超过一定角度,则算摇动一次
                        if(Math.abs(this.last_x - this.xAngle)>this.shakeAngle ||
                                Math.abs(this.last_y - this.yAngle)>this.shakeAngle ||
                                Math.abs(this.last_z - this.zAngle)>this.shakeAngle){
                                        this.shakeCount ++;
                        }
                        this.last_x = this.xAngle;
                        this.last_y = this.yAngle;
                        this.last_z = this.zAngle;
                }
 
                //派发事件(应该在shakeCount++时派发一次,写在这里只是为了方便显示测试数据...)
                this.dispatchEventWith(egret.Event.CHANGE,false, {x:this.xAngle,y:this.yAngle,z:this.zAngle,shakeCount:this.shakeCount});
        }
}

Demo下载

【咸鱼教程】Egret实现摇一摇功能的更多相关文章

  1. Egret 摇一摇功能

    一  什么是重力感应 二 什么是陀螺仪 三 Egret中的摇一摇是利用什么原理实现的 四 摇一摇代码 一 什么是重力感应 二 什么是陀螺仪 三 Egret中的摇一摇是利用什么原理实现的 大概是利用手机 ...

  2. C#开发微信门户及应用(38)--微信摇一摇红包功能

    摇一摇周边红包接口是为线下商户提供的发红包功能.用户可以在商家门店等线下场所通过摇一摇周边领取商家发放的红包.我曾经在<C#开发微信门户及应用(28)--微信“摇一摇·周边”功能的使用和接口的实 ...

  3. C#开发微信门户及应用(28)--微信“摇一摇·周边”功能的使用和接口的实现

    ”摇一摇周边“是微信提供的一种新的基于位置的连接方式.用户通过“摇一摇”的“周边”页卡,可以与线下商户进行互动,获得商户提供的个性化的服务.微信4月份有一个赠送摇一摇设备的活动,我们有幸获得赠送资格, ...

  4. Android 摇一摇功能的注意事项

    /**开始重力传感器的检测*/ public void start() { // 获得传感器管理器 sensorManager = (SensorManager) mContext.getSystem ...

  5. 【WP开发】实现“摇一摇”功能

    尽管我的微信是每八个月登录一次,但我相信各位玩得比我多.微信有一个“摇一摇”功能,这个功能其实是利用了加速度传感器来实现的,这个传感器,我估计再低端的手机都会有的,这是严重基本的传感器. 重力加速度既 ...

  6. 利用HTML5的一个重要特性 —— DeviceOrientation来实现手机网站上的摇一摇功能

      介绍之前做两个声明: 以下代码可以直接运行,当然你别忘了引用jQuery才行. <script> // DeviceOrientation将底层的方向传感器和运动传感器进行了高级封装, ...

  7. html5实现微信摇一摇功能

    在HTML5中,DeviceOrientation特性所提供的DeviceMotion事件封装了设备的运动传感器时间,通过改时间可以获取设备的运动状态.加速度等数据(另还有deviceOrientat ...

  8. IOS开发之——类似微信摇一摇的功能实现

    首先,一直以为摇一摇的功能实现好高大上,结果百度了.我自己也模仿写了一个demo.主要代码如下: 新建一个项目,名字为AnimationShake. 主要代码: - (void)motionBegan ...

  9. Android 摇一摇之双甩功能

    Android 摇一摇之双甩功能 最近做一个摇一摇的功能 网上相关代码很多 但是这次的需求有点奇葩 要求是摇两次才生效 看起来好像很简单 但真正要做遇到的问题还是很多 时间限制 机型灵敏性 摇动的方式 ...

随机推荐

  1. zhuzher日志log

    val log=sc.textFile("/data/logstash/data/*.log") val rowRDD2=log2.map(line=>(line.split ...

  2. hive 表优化

    一.外部表和内部表的区别 (1)创建表时指定external关键字,就是外部表,不指定external就是内部表 (2)内部表删除后把元数据和数据都删除了,外部表删除后只是删除了元数据,不会删除hdf ...

  3. Visual Studio 2012中使用GitHub

    前言 一直以来都想使用Git来管理自己平时积累的小代码,就是除了工作之外的代码了.有时候自己搞个小代码,在公司写了,就要通过U盘或者网盘等等 一系列工具进行Copy,然后回家才能继续在原来的基础上作业 ...

  4. c#系统消息类封装

    今天封装了一个返回json的消息类 using System; using System.Collections.Generic; using System.Linq; using System.Te ...

  5. SpringMVC由浅入深day01_6源码分析(了解)

    6 源码分析(了解) 通过前端控制器源码分析springmvc的执行过程. 入口 第一步:前端控制器接收请求 调用doDiapatch 第二步:前端控制器调用处理器映射器查找 Handler 第三步: ...

  6. Tomcat catalina-deamon.out 日志切割 每天生成一个文件

    Tomcat 使用 jsvc 以守护进程的方式启动(daemon.sh ).这样tomcat自身将会生成另外一个日志文件(catalina-daemon.out),而不是之前的catalina.out ...

  7. 开发还是应该使用linux

    这几天在Windows系统下,安装了几个IDE,体量大,4.5个G,启动速度慢,占用系统资源多,并且最难受的是,这些IDE的限制性太强,只能按照UI给定的规则来操作,例如现在手中有一个已完成的项目,用 ...

  8. Memcache未授权访问漏洞

    Memcached 分布式缓存系统,默认的 11211 端口不需要密码即可访问,黑客直接访问即可获取数据库中所有信息,造成严重的信息泄露. 0X00 Memcache安装 1. 下载Mencache的 ...

  9. iOS开发-- 使用VVDocumenter-Xcode添加代码注释

    在开发Java代码过程中,我们只需在Eclipse中敲/**即可生成字段.方法对应的文档,简单便捷. 在Xcode如果想添加文档注释,需要花费很多时间,有没有简单.快速的方法搞定这一切? 在网上搜索了 ...

  10. Selenium 延时等待

    在 Selenium 中, get() 方法会在网页框架加载结束后结束执行,此时如果获取 page_source ,可能并不是浏览器完全加载完成的页面: 如果某些页面有额外的 Ajax 请求,我们在网 ...