Created
April 18, 2011 02:23
-
-
Save jessefreeman/924701 to your computer and use it in GitHub Desktop.
Quick test for getting the angle from the accelerometer.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package | |
{ | |
import flash.display.Sprite; | |
import flash.display.StageAlign; | |
import flash.display.StageScaleMode; | |
import flash.events.Event; | |
import flash.events.AccelerometerEvent; | |
import flash.geom.Point; | |
import flash.sensors.Accelerometer; | |
import flash.text.TextField; | |
/** | |
* @author jessefreeman | |
*/ | |
public class SkateOrFall extends Sprite | |
{ | |
private var ball:Sprite; | |
private var accelerometer:Accelerometer; | |
private var xSpeed:Number = 0; | |
private var ySpeed:Number = 0; | |
private const RADIUS = 20; | |
private var tf:TextField; | |
private var needle:Sprite; | |
private var distancePoint:Point = new Point(0,-100); | |
public function SkateOrFall() | |
{ | |
stage.scaleMode = StageScaleMode.NO_SCALE; | |
stage.align = StageAlign.TOP_LEFT; | |
createBall(); | |
if (Accelerometer.isSupported) | |
{ | |
accelerometer = new Accelerometer(); | |
accelerometer.addEventListener(AccelerometerEvent.UPDATE, accUpdateHandler); | |
stage.addEventListener(Event.ENTER_FRAME, enterFrameHandler); | |
} | |
tf = new TextField(); | |
addChild(tf); | |
createNeedle(); | |
} | |
private function createNeedle():void | |
{ | |
needle = new Sprite(); | |
needle.graphics.clear(); | |
needle.graphics.lineStyle(6, 0xff0000); | |
needle.graphics.lineTo(0,0); | |
needle.graphics.lineTo(distancePoint.x, distancePoint.y); | |
needle.graphics.endFill(); | |
addChild(needle); | |
needle.x = (stage.fullScreenWidth *.5) - 3; | |
needle.y = stage.fullScreenHeight; | |
} | |
private function updateNeedle():void | |
{ | |
var x:int = distancePoint.x; | |
var y:int = distancePoint.y; | |
var mousex = x-stage.fullScreenWidth * .5; | |
var mousey = (y-stage.fullScreenHeight * .5)*-1; | |
var angle:Number = Math.atan(mousey/mousex)/(Math.PI/180) - 90; | |
if (mousex<0) { | |
angle += 180; | |
} | |
if (mousex>=0 && mousey<0) { | |
angle += 360; | |
} | |
tf.text = "Angle: "+angle; | |
needle.rotation = angle*-1; | |
} | |
private final function createBall():void | |
{ | |
ball = new Sprite(); | |
ball.graphics.beginFill(0xFF0000); | |
ball.graphics.drawCircle(0, 0, RADIUS); | |
ball.cacheAsBitmap = true; | |
ball.x = stage.stageWidth / 2; | |
ball.y = stage.stageHeight / 2; | |
addChild(ball); | |
} | |
private final function enterFrameHandler(event:Event):void | |
{ | |
event.stopPropagation(); | |
moveBall(); | |
} | |
private final function moveBall():void | |
{ | |
var newX:Number = ball.x + xSpeed; | |
var newY:Number = ball.y + ySpeed; | |
if (newX < 20) | |
{ | |
ball.x = RADIUS; | |
xSpeed = 0; | |
} | |
else if (newX > stage.stageWidth - RADIUS) | |
{ | |
ball.x = stage.stageWidth - RADIUS; | |
xSpeed = 0; | |
} | |
else | |
{ | |
ball.x += xSpeed; | |
} | |
if (newY < RADIUS) | |
{ | |
ball.y = RADIUS; | |
ySpeed = 0; | |
} | |
else if (newY > stage.stageHeight - RADIUS) | |
{ | |
ball.y = stage.stageHeight - RADIUS; | |
ySpeed = 0; | |
} | |
else | |
{ | |
ball.y += ySpeed; | |
} | |
distancePoint.x = ball.x; | |
updateNeedle(); | |
} | |
private final function accUpdateHandler(event:AccelerometerEvent):void | |
{ | |
xSpeed -= event.accelerationX * 2; | |
ySpeed += event.accelerationY * 2; | |
//tf.text = "xSpeed "+ xSpeed; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment