教程目录
一 实现原理
二 代码
三 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. hql Hibernate.gethibernatetemplate()

    1. find(String hql);  //普通查询 示例:this.gethibernateTemplate().find("from User"); 2. find(Str ...

  2. lkl风控.随机森林模型测试代码spark1.6

    /** * Created by lkl on 2017/10/9. */ import org.apache.spark.sql.hive.HiveContext import org.apache ...

  3. ubuntu 12.04 右上角的网络连接图标突然消失不见

    某天Ubuntu右上角的网络连接图标突然消失不见了,右击panel -> add to panel -> Notification Area 也不管用,最关键的是上不了网了.可以在Netw ...

  4. pytesseract 报windows err no2的错误

    需要把源安装文件pytesseract.py的修改为,tesseract_cmd = 'C:/Program Files (x86)/Tesseract-OCR/tesseract.exe' 原始是t ...

  5. Android重写HorizontalScrollView仿ViewPager效果

    Android提供的ViewPager类太复杂,有时候没有必要使用,所以重写一个HorizontalScrollView来实现类似的效果,也可以当做Gallery来用 思路很简单,就是重写onTouc ...

  6. Visual Assist X 10.8.2042的Crack破解补丁. 2014.06.25 (General release.)

    VA小组时隔一个月又公布了新的版本号,这个版本号新添加了5个特性,修复了7-8个bug.而且也是稳定的Release版.所以这是很推荐更新的一个版本号. 对于破解补丁还是老规矩,请到我的下载空间下载, ...

  7. mysql触发器的使用 想让b字段在更新的时候把旧数据保存到a字段中

    使用mysql希望数据库自动触发一些规则,进行更新数据的时候,就需要用触发器了,比如 将旧数据保存到额外字段中,如何做呢? 在abc表中 name更新的时候 我希望把name的老数据保存到 old_n ...

  8. hbase2.0.0-安装部署

    依赖hadoop 环境,我这边的版本是hadoop-2.6.5 选择hbase2.0.0版本的时候,去官网查看支持的hadoop版本 1.伪分布式安装 下载:http://mirror.bit.edu ...

  9. XSS payload 大全

    收集的一些XSS payload,主要分为五大类,便于查阅. #第一类:Javascript URL <a href="javascript:alert('test')"&g ...

  10. Installing Python Modules

    Email: distutils-sig@python.org As a popular open source development project, Python has an active s ...