Tag Archive for as3

Creating an Equalizer that responds to the SoundMixer

package nl.funkymonkey.drawing {
import nl.funkymonkey.ui.Colors;
import nl.funkymonkey.utils.MathUtils;

import flash.display.Shape;
import flash.display.Sprite;
import flash.media.SoundMixer;
import flash.utils.ByteArray;

/**
* @author sidneydekoning
*
* This class is instanciated like so:
*
* var _eq:Equalizer = new Equalizer( );
* _eq.x = 200;
* _eq.y = 200;
* addChild( _eq );
*
* Any sound that you load in and play, the SoundMixer Class will respond to.
* Dont forget to call _eq.update( ) every time you want the graphics to be updated
* For instance on a timer or ENTER_FRAME.
*/
public class Equalizer extends Sprite {

private var _bars:Sprite;

public function Equalizer() {

_bars = new Sprite( );
_bars.x = 0;
_bars.y = 0;
addChild( _bars );

drawScanLines( );
}

private function drawScanLines():Shape {

var noOfLines:int = 12;

var line:Shape = new Shape( );
var runningY:int = 0;
for(var i:int = 0; i < noOfLines ; ++i) {
line.graphics.lineStyle( 1, 0x000000, 1 );
line.graphics.moveTo( 0, runningY );
line.graphics.lineTo( 32, runningY );
addChild( line );
runningY += 2;
}
return line;
}

public function updates():void {
var spectrumData:ByteArray = new ByteArray( );

// FIXME: -- Workaround for Adobe Bug: computeSpectrum doen not only compute this instance of the flashplayer, but all instances. So if it fails, generate a random byteArray.
try {
SoundMixer.computeSpectrum(spectrumData, true, 2);
}
catch(e:Error) {
spectrumData = new ByteArray();
for(var j : uint = 0;j < 2048; j++) {
spectrumData.position = j;
spectrumData.writeFloat(MathUtils.random(-0.5, 0.5));
}
spectrumData.position = 0;
}

_bars.graphics.clear( );
_bars.graphics.beginFill( Colors.GREY );

for (var i:Number = 0; i < 32 ; i += 2) {
var n:Number = spectrumData.readFloat( ) * 20;
_bars.graphics.drawRect( i, 20, 2, -n );
}
}
}
}

//
// Create a Class called MathUtils and place this function in there:
static public function random(...args) : Number {
var argLength : uint = args.length;
switch(argLength) {
case 0:
// perform the standard Math.random
return Math.random();
break;
case 2:  // returns a random float between args[0] and args[1];
case 3:
// returns a random int between args[0] and args[1] if args[2] is set
var returnValue : Number = (Math.random() * (Number(args[1]) - Number(args[0]))) + Number(args[0]);
return (args[2] != undefined && Boolean(args[2])) ? int(returnValue) : returnValue;
break;
default:
throw new IllegalOperationError("MathUtils.random takes either 0, 2 or 3 arguments");
return undefined;
break;
}
}

source

Draw an ‘x’ at DisplayObject’ registration point

public function drawRegistrationPoint( s:Sprite ):void {
//translate movieclip
var mark:Sprite = new Sprite( );
mark.graphics.lineStyle( 1 , 0xFF0000 );
mark.graphics.moveTo( -2 , -2 );
mark.graphics.lineTo( 2 , 2 );
mark.graphics.moveTo( -2 , 2 );
mark.graphics.lineTo( 2 , -2 );
s.parent.addChild( mark );
}

source

Calculating the height of an object to percentages in relation to the mouse position

// Calculating the mouse position within an object to percentages in relation to its height

// var scale = 100 ( result range from 0 - 100 )
// var scale = 10  ( result range from 0 - 10 )
// var scale = 1   ( result range from 0 - 1 )

trace( ( mySprite.mouseY / mySprite.height) * scale );

source

Align objects on Stage utility

package utils
{
import flash.display.DisplayObject;

public class Align
{

public function Align()
{

}

public static function toCenter( obj:DisplayObject ):void
{
obj.x = obj.stage.stageWidth / 2 - obj.width / 2;
obj.y = obj.stage.stageHeight / 2 - obj.height / 2;
}

public static function toTopLeft( obj:DisplayObject ):void
{
obj.x = obj.stage.x;
obj.y = obj.stage.y;
}

public static function toTopCenter( obj:DisplayObject ):void
{
obj.x = obj.stage.stageWidth / 2 - obj.width / 2;
obj.y = obj.stage.y;
}

public static function toTopRight( obj:DisplayObject ):void
{
obj.x = obj.stage.stageWidth - obj.width;
obj.y = obj.stage.y;
}

public static function toBottomRight( obj:DisplayObject ):void
{
obj.x = obj.stage.stageWidth - obj.width;
obj.y = obj.stage.stageHeight - obj.height;
}

public static function toBottomCenter( obj:DisplayObject ):void
{
obj.x = obj.stage.stageWidth / 2 - obj.width / 2;
obj.y = obj.stage.stageHeight - obj.height;
}

public static function toBottomLeft( obj:DisplayObject ):void
{
obj.x = obj.stage.x;
obj.y = obj.stage.stageHeight - obj.height;
}
}
}

source

Strip spaces from a String with RegEx

// strip spaces from oldString

var newString:String = String(oldString.replace( /s/g, "" ));

source

Scroller

// grab its top position before we scroll anything
private var contentStart:Number = content_mc.landPort.content_mc.y;
private var dragRatio:Number;

// add the mouse_down to the scrollArrow and add the mouse_up to the stage
scrollArrow.addEventListener (MouseEvent.MOUSE_DOWN, drag);
this.addEventListener (MouseEvent.MOUSE_UP, dragOff);

private function drag (evt:Event):void
{
// figure out how far the content needs to move for each pixel the scrollArrow moves
dragRatio = (content_mc.height-contentMask.height) / (scrollerTrack.height-scrollArrow.height);

// define where the scrollArrow can move within
var rectangle:Rectangle = new Rectangle(scrollArrow.x, scrollerTrack.y, 0, scrollerTrack.height-scrollArrow.height);

// listen for scrolling and start dragging
this.addEventListener (MouseEvent.MOUSE_MOVE, dragging);
evt.target.startDrag (false, rectangle);
}

private function dragging (evt:Event):void
{
// figure out where the content needs to scroll to and tween it
var nextPos:Number = contentStart-((scrollArrow.y-contentStart)*dragRatio);
TweenMax.to(content_mc, .5,{y:nextPos});
}
private function dragOff (evt:Event):void
{
// quit yo draggin
evt.target.stopDrag ();
this.removeEventListener (MouseEvent.MOUSE_MOVE, dragging);
}

source

XML Loader

import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.HTTPStatusEvent;
import flash.events.IEventDispatcher;
import flash.events.IOErrorEvent;
import flash.events.ProgressEvent;
import flash.events.SecurityErrorEvent;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;

var dataXML:XML;
var path = "test.xml";
var xmlRequest:URLRequest = new URLRequest(path);
var xmlLoader:URLLoader = new URLLoader()
xmlLoader.dataFormat = URLLoaderDataFormat.TEXT;
configXmlLoaderListeners(xmlLoader);
xmlLoader.load(xmlRequest);

//---------------------------------
//
// Listeners
//
//--------------------------------

function configXmlLoaderListeners(dispatcher:IEventDispatcher):void {
dispatcher.addEventListener(Event.COMPLETE, xmlCompleteHandler);
dispatcher.addEventListener(Event.OPEN, xmlOpenHandler);
dispatcher.addEventListener(ProgressEvent.PROGRESS, xmlProgressHandler);
dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, xmlSecurityErrorHandler);
dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, xmlHttpStatusHandler);
dispatcher.addEventListener(IOErrorEvent.IO_ERROR, xmlIoErrorHandler);
}

function xmlCompleteHandler(event:Event):void {
var loader:URLLoader = URLLoader(event.target);
//trace("completeHandler: " + loader.data);

try{
dataXML = new XML(event.target.data)
//trace("dataXML " + dataXML);

gotoAndStop("build menu");

} catch (error:TypeError){
trace("Could not parse the XML")
trace(error.message)
}
}

// Optional listeners

function xmlOpenHandler(event:Event):void {
trace("openHandler: " + event);
}

function xmlProgressHandler(event:ProgressEvent):void {
trace("progressHandler loaded:" + event.bytesLoaded + " total: " + event.bytesTotal);
}

function xmlSecurityErrorHandler(event:SecurityErrorEvent):void {
trace("securityErrorHandler: " + event);
}

function xmlHttpStatusHandler(event:HTTPStatusEvent):void {
trace("httpStatusHandler: " + event);
}

function xmlIoErrorHandler(event:IOErrorEvent):void {
trace("ioErrorHandler: " + event);
}

source

Fastest loop iteration

// fastest way to iterate through a loop
// - set var to :int
// - count down from desired loop count to zero
// - on each count we test the Boolean value of j (j<1 makes it false)
// - instead of counting down with j-- we use j += -1 because adding negative
//   numbers is faster than subtracting
//

for(var j:int=10; j; j += -1){}

source

Set SWF properties in the Document Class

// this line straight under the imports

[SWF(width="800", height="600", backgroundColor="#333333", frameRate="30")]

source