[AIR] Accelerometer を 回転角度に変換
Category:{ actionscript, AIR, Android, iOS }
Tag:{AIR, Android, iOS, Sample, youtube } Comments:{ No Comments }
Posted:{ 2012.02.18 12:11:08 }
Posted:{ 2012.02.18 12:11:08 }
モバイル AIR(Android / iOS)の Accelerometer の値をイマイチ理解していなかったので、角度に変換するサンプル作ってみました。
動作イメージ
いまいちイメージがわかりにくいかと思ったので、動作イメージを Youtube にアップ。
サンプルコード
コードは下記です。(thx! @saharan)
※もっと良い書き方あるかな?
1 2 3 4 5 6 7 8 9 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 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | /** * copyright (c) 2012 www.romatica.com * @auther itoz */ package { import flash.events.AccelerometerEvent; import flash.sensors.Accelerometer; import flash.events.Event; import flash.display.Sprite; /** * [Air] Accelerometerから、回転角度に変換. * * 【サンプル動画 】 * @see http://www.youtube.com/watch?v=IkPVwSv6rjE * */ public class AccelerometerConvertToRotation_Sample extends Sprite { private var circle : Sprite; private var rollingX : Number = 0; private var rollingY : Number = 0; private const FACTOR : Number = 0.5; public function AccelerometerConvertToRotation_Sample() { addEventListener(Event.ADDED_TO_STAGE, onAdded); } private function onAdded(event : Event) : void { removeEventListener(Event.ADDED_TO_STAGE, onAdded); setCircle(); setAccelerometer(); } /** * 円を生成 */ private function setCircle() : void { circle = addChild(new Sprite()) as Sprite; circle.graphics.beginFill(0x00cc00); circle.graphics.drawCircle(0, 0, 64); circle.graphics.beginFill(0x0000cc); circle.graphics.drawCircle(50, 0, 10); circle.graphics.endFill(); circle.x = stage.stageWidth / 2; circle.y = stage.stageHeight / 2; } /** * Accelerometerを生成 */ private function setAccelerometer() : Boolean { var accelerometer : Accelerometer; if (Accelerometer.isSupported) { accelerometer = new Accelerometer(); if (!accelerometer.muted) { accelerometer.setRequestedUpdateInterval(1000 / 30); accelerometer.addEventListener(AccelerometerEvent.UPDATE, accelerometerUpdate); return true; } } return false; } /** * Accelerometer アップデート */ private function accelerometerUpdate(event : AccelerometerEvent) : void { // ---------------------------------- // Accelerometerの傾きを 角度に変換 // ---------------------------------- rollingX = (event.accelerationX * FACTOR) + (rollingX * (1 - FACTOR)); rollingY = (event.accelerationY * FACTOR) + (rollingY * (1 - FACTOR)); var rad : Number = Math.atan2(rollingY, -rollingX); var angle : Number = rad * 180 / Math.PI; //---------------------------------- // 円を回転 //---------------------------------- if (circle != null) circle.rotation = angle; } } } |







