Skip to content

Instantly share code, notes, and snippets.

@jessefreeman
Created April 18, 2011 02:23
Show Gist options
  • Save jessefreeman/924701 to your computer and use it in GitHub Desktop.
Save jessefreeman/924701 to your computer and use it in GitHub Desktop.
Quick test for getting the angle from the accelerometer.
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