【咸鱼教程】Egret实现摇一摇功能

教程目录
一 实现原理
二 代码
三 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下载

原文地址:https://www.cnblogs.com/gamedaybyday/p/9219939.html

时间: 2024-08-30 18:27:57

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

Android实战简易教程-第三十一枪(基于加速度传感器的摇一摇功能实例)

下面我们来看一下微信摇一摇功能的模拟实现,我们是基于手机加速度传感器实现该功能,实现方法比较简单. MainActivity.java: MainActivity.java: package com.location.activity; import android.app.Activity; import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorEvent; i

html5实现摇一摇功能

觉得挺好,就复制一下,以后或许用的着.... 用HTML5实现手机摇一摇的功能的教程 阅读:2057次   时间:2013-09-05 14:55:18   字体:[大 中 小] 在百度开发者大会上我介绍过HTML5另外一个重要特性就是DeviceOrientation,它将底层的方向传感器和运动传感器进行了高级封装,提供了DOM事件的支持.这个特性包括两种事件:1.  deviceOrientation:封装了方向传感器数据的事件,可以获取手机静止状态下的方向数据,例如手机所处角度.方位.朝向

Android加速度传感器的使用:摇一摇功能的实现

一.原理介绍: Android手机中摇一摇的功能已经很常见了,最近接触到了这个功能,原理很简单:使用加速度传感器,在晃动手机时,监听加速度在各个方向的变化,当加速度值超过设定的灵敏度时,则触发摇一摇功能. 二.使用到的类: SensorManager SensorEventListener 三.功能实现: 1.摇一摇功能:我将摇一摇功能封装成了一个类ShakeUtils,在使用时按照注释中的说明使用即可,ShakeUtils.java如下(差的包请CTRL+SHIFT+O导入): /** * 摇

Android 使用加速度传感器实现摇一摇功能及优化

如有转载,请声明出处: 时之沙: http://blog.csdn.net/t12x3456 目前很多应用已经实现了摇一摇功能,这里通过讲解该功能的原理及实现回顾一下加速度传感器的使用: 1.首先获得传感器管理器的实例 sensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE); 2.通过传感器管理器获得加速传感器 accelerateSensor = getSensorManager(cont

Android 微信摇一摇功能实现

开发之前 今天学习了一下传感器, 脑子里就蹦出了微信的摇一摇, 于是鼓了鼓勇气抽空写了出来, 本人菜鸟一枚, 希望大神们多多指点 开发环境 Android Studio 2.2.1 JDK1.7 API 24 Gradle 2.2.1 相关知识点 加速度传感器 补间动画 手机震动 (Vibrator) 较短 声音/音效 的播放 (SoundPool) 开始开发 案例预览 案例分析 我们接下来分析一下这个案例, 当用户晃动手机时, 会触发加速传感器, 此时加速传感器会调用相应接口供我们使用, 此时

Android摇一摇功能的实现

Android利用传感器实现类似摇一摇功能 1.基本原理 摇一摇功能基本原理是利用手机加速度传感器,当加速度到达某个值时,触发某个事件,如UI改变,手机震动,播放声音,获取数据等事件. 2.传感器原理和使用 传感器原理和使用,可以参见上一篇博客,Android中传感器Sensor的使用 3.声音事件 获取对象MediaPlay类  mediaPlayer=MediaPlayer.create(getApplicationContext(), R.raw.music); 事件触发:mediaPla

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

”摇一摇周边“是微信提供的一种新的基于位置的连接方式.用户通过“摇一摇”的“周边”页卡,可以与线下商户进行互动,获得商户提供的个性化的服务.微信4月份有一个赠送摇一摇设备的活动,我们有幸获得赠送资格,取得一个摇一摇的设备用来测试这个新增的.很有潜力的功能.”摇一摇周边“是微信基于低功耗蓝牙技术的 O2O 入口级应用,与微信的其他线下连接能力一道,加速促成了微信 O2O 闭环的实现.本文主要介绍一摇设备的配置使用,以及如何在开发层面上,定义及实现微信摇一摇的功能接口. 1.IBeacon基础知识介

android传感器;摇一摇抽签功能

package com.kane.sensortest; import java.util.Random; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.ap

iOS开发——高级技术&摇一摇功能的实现

摇一摇功能的实现 在AppStore中多样化功能越来越多的被使用了,所以今天就开始介绍一些iOS开发的比较实用,但是我们接触的比较少的功能,我们先从摇一摇功能开始 在 UIResponder中存在这么一套方法 1 - (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0); 2 3 - (void)motionEnded: