【咸鱼教程】Egret实现摇一摇功能
教程目录
一 实现原理
二 代码
三 Demo下载
一 实现原理
监听设备旋转角度的变化,来判断用户是否摇动手机。
参考:
智能手机里陀螺仪和重力感应有何区别?
HTML5实现摇一摇的功能
Egret官方陀螺仪教程
二 代码
摇一摇工具类ShakeTool使用范例
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源码
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实现摇一摇功能的更多相关文章
- Egret 摇一摇功能
一 什么是重力感应 二 什么是陀螺仪 三 Egret中的摇一摇是利用什么原理实现的 四 摇一摇代码 一 什么是重力感应 二 什么是陀螺仪 三 Egret中的摇一摇是利用什么原理实现的 大概是利用手机 ...
- C#开发微信门户及应用(38)--微信摇一摇红包功能
摇一摇周边红包接口是为线下商户提供的发红包功能.用户可以在商家门店等线下场所通过摇一摇周边领取商家发放的红包.我曾经在<C#开发微信门户及应用(28)--微信“摇一摇·周边”功能的使用和接口的实 ...
- C#开发微信门户及应用(28)--微信“摇一摇·周边”功能的使用和接口的实现
”摇一摇周边“是微信提供的一种新的基于位置的连接方式.用户通过“摇一摇”的“周边”页卡,可以与线下商户进行互动,获得商户提供的个性化的服务.微信4月份有一个赠送摇一摇设备的活动,我们有幸获得赠送资格, ...
- Android 摇一摇功能的注意事项
/**开始重力传感器的检测*/ public void start() { // 获得传感器管理器 sensorManager = (SensorManager) mContext.getSystem ...
- 【WP开发】实现“摇一摇”功能
尽管我的微信是每八个月登录一次,但我相信各位玩得比我多.微信有一个“摇一摇”功能,这个功能其实是利用了加速度传感器来实现的,这个传感器,我估计再低端的手机都会有的,这是严重基本的传感器. 重力加速度既 ...
- 利用HTML5的一个重要特性 —— DeviceOrientation来实现手机网站上的摇一摇功能
介绍之前做两个声明: 以下代码可以直接运行,当然你别忘了引用jQuery才行. <script> // DeviceOrientation将底层的方向传感器和运动传感器进行了高级封装, ...
- html5实现微信摇一摇功能
在HTML5中,DeviceOrientation特性所提供的DeviceMotion事件封装了设备的运动传感器时间,通过改时间可以获取设备的运动状态.加速度等数据(另还有deviceOrientat ...
- IOS开发之——类似微信摇一摇的功能实现
首先,一直以为摇一摇的功能实现好高大上,结果百度了.我自己也模仿写了一个demo.主要代码如下: 新建一个项目,名字为AnimationShake. 主要代码: - (void)motionBegan ...
- Android 摇一摇之双甩功能
Android 摇一摇之双甩功能 最近做一个摇一摇的功能 网上相关代码很多 但是这次的需求有点奇葩 要求是摇两次才生效 看起来好像很简单 但真正要做遇到的问题还是很多 时间限制 机型灵敏性 摇动的方式 ...
随机推荐
- hive kettle 学习笔记
学习网址 http://wiki.pentaho.com/display/BAD/Transforming+Data+within+Hive
- 禁止选中文本JS
if (typeof(element.onselectstart) != "undefined") { // IE下禁止元素被选取 element.onselectstart = ...
- ubuntu:如何制作类似jeso的系统?
chroot 下载ubuntu的core包或base包 chroo后,先安装grub,再kernel,基本就ok了! 提示:mount --bind /proc newroot/proc 可能的问题 ...
- 修改vs2005,vs2008,vs2010调试默认浏览器
前些日子不小心安装上了一个sogou的浏览器,感觉这个浏览器用起来也算方便,所以就么有卸载,一直就这么用着,但当我用vs来调试web程序的 时候问题出来了,默认的调试浏览器变成了搜狗的浏览器了,我在v ...
- JAXB基本使用
JAXB主要用来实现对象和XML之间的序列化和反序列化,关于JAXB的介绍就不多说了,网上一搜一大把,这里主要总结下基本使用方法和一些注意事项 首先定义两个示例类ClassA,ClassB,用于后续的 ...
- java程序员如何编写更好的单元测试的7个技巧
详解 cppunit进行单元测试 单元测试(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的.很明确的功能是否正确.通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函 ...
- go语言之PLAN9汇编
http://blog.studygolang.com/2013/05/asm_and_plan9_asm/ https://lrita.github.io/2017/12/12/golang-asm ...
- Java实现匿名内部类的简单应用
在查看数码相片时,通常会使用一款图片查看软件,该软件应该能遍历文件夹下的所有图片并进行显示.编写程序,实现一个图片查看软件,它可以支持6张图片,通过单击不同的按钮就可以查看不同的图片. 思路分析:就是 ...
- InsertSql
declare @hobby table(hobbyID int,hName nvarchar(100));insert into @hobby(hobbyID,hName)Select 1,'爬山' ...
- [JS] console.time() - 计时器构造函数及如何计时
概述 使用计时器可以对代码运行过程进行测速.你可以给每个计时器取一个名字,每个页面上最多可以运行一万个计时器.当你使用计时器名字调用 console.timeEnd() 函数时,浏览器会返回一个毫秒值 ...