E: me@sabisin.com | T: +4915168651209

Actionscript 3 : Toggling a Boolean

No need of conditional statement to figure out which direction to toggle a Boolean value.

var iStRue:Boolean;
iStRue = !iStRue;
trace(iStRue);      //true
iStRue = !iStRue;
trace(iStRue);      //false

Device Shake – Accelerometer

Heres a small snippet to detect shakes on mobile devices with accelerometer:

var lastShake:Number = 0;
var shakeWait:Number = 600;
 
var acc:Accelerometer = new Accelerometer();
acc.addEventListener(AccelerometerEvent.UPDATE, onAccUpdate);
 
function onAccUpdate(evt:AccelerometerEvent):void
{
	if(getTimer() - lastShake > shakeWait && (evt.accelerationX >= 1.5 || evt.accelerationY >= 1.5 || evt.accelerationZ >= 1.5))
	{
		sHakeiT();
		lastShake = getTimer();
	}
}
 
function shakeIt()
{
	trace("shakeIt();");
}

To detect software render mode with Flare3D

For Flare3D the context object is exposed through the scene.context object. So to find out if you are using software you wait for your scene to initialize.

private function iNitsCene():void
{
	scene = new Scene3D(this);
	scene.addEventListener(Scene3D.COMPLETE_EVENT, Complete);
}

private function Complete(eVt:Event):void
{
	//Context3DRenderMode.AUTO
	if(scene.context.driverInfo == Context3DRenderMode.SOFTWARE || scene.context.driverInfo.indexOf("Software") != -1)
	{
		// Handle notifying users about their unsupported computers here.
	} else {
		// Start up the awesome!
	}
}

Update:
A good practice is to rely on Context3DRenderMode.AUTO, Stage3D will try to run on hardware, then fallback to software if the drivers are too old (released before January 1st, 2009), if the graphics card is not support Pixel Shader 2.x or if the graphics card chipset is blacklisted.

mYsTage3D.addEventListener(Event.CONTEXT3D_CREATE, onContextCreated);

// request the 3d context
mYsTage3D.requestContext3D(Context3DRenderMode.AUTO);

// when the context is available, grab it
function onContextCreated ( eVt:Event ):void
{
	// grab the 3D context
	var cOntext3D:Context3D = mYsTage3D.context3D;

	// are we running hardware of software ?
	var isHW:Boolean = context3D.driverInfo.toLowerCase().indexOf("software") == -1;
}

InfoAdditions AIR for iOS

Compiling an iOS app using Flash requires an application descriptor file. Within this XML file, you can tell the app to compile for High-Res iPhones, iPad 2 as well as remove the default gloss on an icon and even change the look-and-feel of a status bar.

Settings that apply only to iOS devices are placed within the element in the application descriptor. The iPhone element can have an InfoAdditions element and a requested element as child. The InfoAdditions element allows you to specify key-value pairs that are added to the Info.plist settings file for the application.

<iPhone>
	<InfoAdditions>
		<![CDATA[
			<key>UIDeviceFamily</key>
			<array>
				<!-- iPhone -->
				<string>1</string>
				<!-- iPad -->
				<string>2</string>
			</array>
			<!-- Remove Gloss on Icon -->
			<key>UIPrerenderedIcon</key>
			<string>YES</string>
			<!-- Make Bar on Iphone Black -->
			<key>UIStatusBarStyle</key>
			<string>UIStatusBarStyleBlackOpaque</string>
			<!-- Persistent Wifi for iPad Apps -->
			<key>UIRequiresPersistentWiFi</key>
			<string>NO</string>
			<!-- Exit the App Completely, not just suspend -->
			<key>UIApplicationExitsOnSuspend</key><true />
		]]>
	</InfoAdditions>
	<!-- Make this available for Retina Display-->
	<requestedDisplayResolution>high</requestedDisplayResolution>
</iPhone>

Minimum or Maximum value from an array of numbers

First, note that Math.min() and Math.max() can take any number of arguments. Also, it’s important to understand the apply() method available to Function objects. It allows you to pass arguments to the function using an Array. Let’s take advantage of both:

var aRr:Array = [2,3,3,4,2,2,5,6,7,2];
var mAxvAlue:Number = Math.max.apply(null, aRr);
var mInvAlue:Number = Math.min.apply(null, aRr);

Here’s the best part: the “loop” is actually run using native code (inside Flash Player), so it’s faster than searching for the minimum or maximum value using a pure ActionScript loop.

ActionScript 3 : Get a Class Reference by Class Name

If you need to get a reference to a class in ActionScript 3, but only know the class name, then you can use the flash.utils.getDefinitionByName to create an instance of the class. For example:

package {
	import flash.display.Sprite;
	import flash.utils.getDefinitionByName;

	public class DynamicCall extends Sprite
	{
		public function DynamicCall()
		{
                    var ClassReference:Class = getDefinitionByName("ClassName") as Class;
		}
	}
}

Example :

var ClassReference:Class = getDefinitionByName("String") as Class;
var str:String = (new ClassReference("SAbi Sin") as String);
trace(str);

This basically creates an instance of the String class, from the class name “String”. getDefinitionByName takes the entire class path, so if you wanted to create an instance of MovieClip, you would provide the entire path:

var ClassReference:Class = getDefinitionByName("flash.display.MovieClip") as Class;

Simple useful Snippet.