<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>AS3 Game Gears</title>
	<atom:link href="http://www.as3gamegears.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.as3gamegears.com</link>
	<description>Boost your tools!</description>
	<lastBuildDate>Wed, 19 Jun 2013 20:28:09 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Bluetooth ANE</title>
		<link>http://www.as3gamegears.com/air-native-extension/bluetooth-ane/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=bluetooth-ane</link>
		<comments>http://www.as3gamegears.com/air-native-extension/bluetooth-ane/#comments</comments>
		<pubDate>Wed, 19 Jun 2013 12:13:54 +0000</pubDate>
		<dc:creator>Dovyski</dc:creator>
				<category><![CDATA[Air Native Extension]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[MIT]]></category>

		<guid isPermaLink="false">http://www.as3gamegears.com/?p=1108</guid>
		<description><![CDATA[Bluetooth ANE is a native extension to use Bluetooth capabilities on Android devices. The extension allows the application to send and receive data (both as ByteArray), as well as scan for available devices (discovery). There are several events which the &#8230; <a href="http://www.as3gamegears.com/air-native-extension/bluetooth-ane/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://as3breeze.com/bluetooth-ane/" target="_blank">Bluetooth ANE</a> is a native extension to use Bluetooth capabilities on Android devices. The extension allows the application to send and receive data (both as <code>ByteArray</code>), as well as scan for available devices (discovery).</p>
<p>There are several events which the application can listen, for example when device becomes HIDDEN after being discoverable (VISIBLE). When a device connects to the application, the generated event contains some information about the device, such as its name and Bluetooth MAC address.</p>
<p><strong>Sample</strong></p>
<pre class="brush: as3">// Note this code below is not tested at all, but written as example. If you tend to try this code and find some error, please let me know
// Mail and Google+: prototive@gmail.com (use G+)
// Twitter: @danelkirch 

import com.as3breeze.air.ane.android.*;

// It is important to call isSupported, otherwise the default adapter is not found
if ( Bluetooth.isSupported ) {
	// Initiating bluetooth device with generic UUIDs
	var bluetooth:Bluetooth = Bluetooth.currentAdapter();
	bluetooth.addEventListener( BluetoothScanEvent.BLUETOOTH_DISCOVERY_STARTED, bluetoothScanEventHandler);
	bluetooth.addEventListener( BluetoothScanEvent.BLUETOOTH_DEVICE_FOUND, bluetoothScanEventHandler);
	bluetooth.addEventListener( BluetoothScanEvent.BLUETOOTH_DISCOVERY_FINISHED, bluetoothScanEventHandler);
	bluetooth.scanForVisibleDevices();
}
//All of the visible devices will be stored here
var availableDevices:Vector. = new Vector.();

// In the end, this example shows how to connect to a device, that does not accept the generic UUID
var arduinoDevice:BluetoothDevice;
var connectToArduinoAddress:String = "00:18:E4:0C:68:0E";
var stringToSend:String = "Hello awesome bluetoothdevice!";

function bluetoothScanEventHandler( b:BluetoothScanEvent ):void {
	switch (b.type) {
		case BluetoothScanEvent.BLUETOOTH_DEVICE_FOUND:
			var bondstate:String = "";

			// These are pure android codes
			switch( b.device.bondState ) {
				case 10: bondstate = "no-bond";
				case 11: bondstate = "bonding";  // Not likely to happen in BLUETOOTH_DEVICE_FOUND event but giving it as example
				case 12: bondstate = "bonded";
			}
			trace( "Device found:", b.device.name, "{", b.device.address, "}", bondstate);
			availableDevices.push( b.device );
			break;
		case BluetoothScanEvent.BLUETOOTH_DISCOVERY_FINISHED:
			trace( "Scan finished!","\n","Connectiong to "+connectToArduinoAddress+" in vector ..." );
			var arduinoDevice:BluetoothDevice = null; 
			// As in my case, one of the available devices was a Bluetooth Shield for Arduino so i will find that BluetoothDevice object and connect to it. 
			// Notice that we can set a new UUID for that specific device, since those generic UUIDs for decure and insecure will not work on my SeeedBTSlave device 
			availableDevices.forEach( 
				function( device:BluetoothDevice, index:int, vector:Vector. ){ 
					if( device.address == connectToArduinoAddress ) 
						arduinoDevice = device;
			 } ); 
			// Arduino was found by its MAC address so lets listen for some events and connect to it. 
			if ( arduinoDevice != null ) { 
				arduinoDevice.addEventListener( BluetoothDeviceEvent.BLUETOOTH_DEVICE_CONNECTED, deviceEventHandler); 
				arduinoDevice.addEventListener( BluetoothDeviceEvent.BLUETOOTH_DEVICE_DISCONNECTED, deviceEventHandler); 
				arduinoDevice.addEventListener( BluetoothDeviceEvent.BLUETOOTH_DEVICE_CONNECT_ERROR, deviceEventHandler); 
				// If you were to use this ANE as a chat, use the following eventlistener to receive data. 
				// In this demo i have not yet thought of how to read bytearray from arduino, so arduino, if listening for BLUETOOTH_RECEIVE_DATA event, 
				// will show bytes were received, but these are not handled. If you figure it out, let me know! 
				//arduinoDevice.addEventListener( BluetoothDataEvent.BLUETOOTH_RECEIVE_DATA, gotData);
				 arduinoDevice.connect(); 
			} 
			break; 
		case BluetoothScanEvent.BLUETOOTH_DISCOVERY_STARTED:
			trace( "Scan started..." );
			break;
	}
}
function deviceEventHandler( b:BluetoothDeviceEvent ):void { 
	switch( b.type ) { 
		case BluetoothDeviceEvent.BLUETOOTH_DEVICE_CONNECTED: 
			trace( "Connected to:", b.device.name ); 
			// Create ByteArray of what is being sent. 
			var ba:ByteArray = new ByteArray(); 
			ba.writeUTFBytes( stringToSend ); 
			// Remember to set position to 0. 
			ba.position = 0; 
			// Now send it to device - <a href="http://as3breeze.com/bluetooth-ane/" target="_blank">See Arduino code over here</a> 
			b.device.sendData(ba); 
			break; 
		case BluetoothDeviceEvent.BLUETOOTH_DEVICE_DISCONNECTED: 
			trace( "Device is dis-connected!" );
			break; 
		case BluetoothDeviceEvent.BLUETOOTH_DEVICE_CONNECT_ERROR:
			trace( "Some error occured when connecting <img src='http://www.as3gamegears.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> " );
			break;
	}
}
private function gotData( b:BluetoothDataEvent ):void { 
	var ba:ByteArray = b.data as ByteArray;
	ba.position = 0;
	var str:String = ba.readUTFBytes( ba.bytesAvailable ) as String;
	trace("Received from bluetooth device: ",str);
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.as3gamegears.com/air-native-extension/bluetooth-ane/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ANELicenseChecker</title>
		<link>http://www.as3gamegears.com/air-native-extension/anelicensechecker/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=anelicensechecker</link>
		<comments>http://www.as3gamegears.com/air-native-extension/anelicensechecker/#comments</comments>
		<pubDate>Mon, 17 Jun 2013 11:19:34 +0000</pubDate>
		<dc:creator>Dovyski</dc:creator>
				<category><![CDATA[Air Native Extension]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Apache 2.0]]></category>

		<guid isPermaLink="false">http://www.as3gamegears.com/?p=1106</guid>
		<description><![CDATA[ANELicenseChecker is a native extension for Android to use the application licensing features of Google Play. It provides preventive measures against illegal distribution of your app, allowing the application to query Google Play at run time to obtain the licensing status for &#8230; <a href="http://www.as3gamegears.com/air-native-extension/anelicensechecker/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="https://github.com/pozirk/ANELicenseChecker" target="_blank">ANELicenseChecker</a> is a native extension for Android to use the <a href="http://developer.android.com/google/play/licensing/index.html" target="_blank">application licensing</a> features of Google Play. It provides preventive measures against illegal distribution of your app, allowing the application to query Google Play at run time to obtain the licensing status for the current user, then allow or disallow further use as appropriate.</p>
<p>Using Google Play licensing service, it&#8217;s possible to apply a flexible licensing policy on an application-by-application basis. For example, an application can check the licensing status and then apply custom constraints that allow the user to run it unlicensed for a specific validity period. An application can also restrict use of the application to a specific device, in addition to any other constraints.</p>
<p>The extension works with Google Play and Samsung Apps (Zirconia).</p>
<p><strong>Sample</strong></p>
<pre class="brush: as3">import com.pozirk.license.android.LicenseChecker;
import com.pozirk.license.android.LicenseCheckerEvent;

// initialization
try
{
	_checker = new LicenseChecker();
	_checker.addEventListener(LicenseCheckerEvent.LICENSED, onLicensed);
	_checker.addEventListener(LicenseCheckerEvent.NOT_LICENSED, onNotLicensed);
	_checker.addEventListener(LicenseCheckerEvent.APPLICATION_ERROR, onAppError);
}
catch(err:Error)
{
}

//checking license
_checker.check("YOUR_LICENSE_KEY_FOR_THE_APPLICATION"); //you can find it in your app's "Services and APIs" at developer's dahsboard

protected function onLicensed(event:LicenseCheckerEvent):void
{
	if(int(event.data) == LicenseCheckerEvent.OK)
		... //everything is ok
}

protected function onNotLicensed(event:LicenseCheckerEvent):void
{
	if(int(event.data) == LicenseCheckerEvent.RETRY)
		... //probably there is no internet connection, read more info in docs
	else
		... //not licensed
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.as3gamegears.com/air-native-extension/anelicensechecker/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AndroidInAppPurchase</title>
		<link>http://www.as3gamegears.com/air-native-extension/androidinapppurchase/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=androidinapppurchase</link>
		<comments>http://www.as3gamegears.com/air-native-extension/androidinapppurchase/#comments</comments>
		<pubDate>Fri, 14 Jun 2013 11:10:11 +0000</pubDate>
		<dc:creator>Dovyski</dc:creator>
				<category><![CDATA[Air Native Extension]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Apache 2.0]]></category>

		<guid isPermaLink="false">http://www.as3gamegears.com/?p=1103</guid>
		<description><![CDATA[AndroidInAppPurchase is a native extension for Android to purchase virtual items. It uses Google Play In-app Billing version 3 API, supporting purchase of items, restoration of previously purchased items, consumption of items and subscriptions (not tested). In order to  buy &#8230; <a href="http://www.as3gamegears.com/air-native-extension/androidinapppurchase/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="https://github.com/pozirk/AndroidInAppPurchase" target="_blank">AndroidInAppPurchase</a> is a native extension for Android to purchase virtual items. It uses Google Play In-app Billing version 3 API, supporting purchase of items, restoration of previously purchased items, consumption of items and subscriptions (not tested).</p>
<p>In order to  buy an item within the application, the developer must invoke a single method, which uses the item id and fires events to inform about success or failure. The restoration and consumption of items are similar.</p>
<p><strong>Sample</strong></p>
<pre class="brush: as3">import com.pozirk.payment.android.InAppPurchase;
import com.pozirk.payment.android.InAppPurchaseEvent;
import com.pozirk.payment.android.InAppPurchaseDetails;

// initialization of InAppPurchase
_iap:InAppPurchase = new InAppPurchase();

_iap.addEventListener(InAppPurchaseEvent.INIT_SUCCESS, onInitSuccess);
_iap.addEventListener(InAppPurchaseEvent.INIT_ERROR, onInitError);

_iap.init("YOUR_LICENSE_KEY_FOR_THE_APPLICATION");

...

protected function onInitSuccess(event:InAppPurchaseEvent):void
{
	//you can restore previously purchased items here
}

protected function onInitError(event:InAppPurchaseEvent):void
{
	trace(event.data); //trace error message
}

// making the purchase, _iap should be initialized first
_iap.addEventListener(InAppPurchaseEvent.PURCHASE_SUCCESS, onPurchaseSuccess);
_iap.addEventListener(InAppPurchaseEvent.PURCHASE_ALREADY_OWNED, onPurchaseSuccess);
_iap.addEventListener(InAppPurchaseEvent.PURCHASE_ERROR, onPurchaseError);
_iap.purchase("my.product.id", InAppPurchaseDetails.TYPE_INAPP);

protected function onPurchaseSuccess(event:InAppPurchaseEvent):void
{
	trace(event.data); //product id
}

protected function onPurchaseError(event:InAppPurchaseEvent):void
{
	trace(event.data); //trace error message
}

// getting purchased product details, _iap should be initialized first
_iap.addEventListener(InAppPurchaseEvent.RESTORE_SUCCESS, onRestoreSuccess);
_iap.addEventListener(InAppPurchaseEvent.RESTORE_ERROR, onRestoreError);
_iap.restore(); //restoring purchased in-app items and subscriptions

...

protected function onRestoreSuccess(event:InAppPurchaseEvent):void
{
	var purchase:InAppPurchaseDetails = _iap.getPurchaseDetails("my.product.id"); //getting details of purchase: time, etc.
}

protected function onRestoreError(event:InAppPurchaseEvent):void
{
	trace(event.data); //trace error message
}

// getting purchased and not purchased product details
_iap.addEventListener(InAppPurchaseEvent.RESTORE_SUCCESS, onRestoreSuccess);
_iap.addEventListener(InAppPurchaseEvent.RESTORE_ERROR, onRestoreError);

var items:Array = ["my.product.id1", "my.product.id2", "my.product.id3"];
var subs:Array = ["my.subs.id1", "my.subs.id2", "my.subs.id3"];
_iap.restore(items, subs); //restoring purchased + not purchased in-app items and subscriptions

...

protected function onRestoreSuccess(event:InAppPurchaseEvent):void
{
	var skuDetails1:InAppSkuDetails = _iap.getSkuDetails("my.product.id1"); //getting details of product: time, etc.
	var skuDetails2:InAppSkuDetails = _iap.getSkuDetails("my.subs.id1"); //getting details of product: time, etc.

	var purchase:InAppPurchaseDetails = _iap.getPurchaseDetails("my.purchased.product.id"); //getting details of purchase: time, etc.
}

protected function onRestoreError(event:InAppPurchaseEvent):void
{
	trace(event.data); //trace error message
}

// consuming purchased item
// need to retrieve purchased items first
_iap.addEventListener(InAppPurchaseEvent.RESTORE_SUCCESS, onRestoreSuccess);
_iap.addEventListener(InAppPurchaseEvent.RESTORE_ERROR, onRestoreError);
_iap.restore();
//

...

protected function onRestoreSuccess(event:InAppPurchaseEvent):void
{
	_iap.addEventListener(InAppPurchaseEvent.CONSUME_SUCCESS, onConsumeSuccess);
	_iap.addEventListener(InAppPurchaseEvent.CONSUME_ERROR, onConsumeError);
	_iap.consume("my.product.id");
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.as3gamegears.com/air-native-extension/androidinapppurchase/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ane-device-file-util</title>
		<link>http://www.as3gamegears.com/air-native-extension/ane-device-file-util/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ane-device-file-util</link>
		<comments>http://www.as3gamegears.com/air-native-extension/ane-device-file-util/#comments</comments>
		<pubDate>Wed, 12 Jun 2013 11:21:11 +0000</pubDate>
		<dc:creator>Dovyski</dc:creator>
				<category><![CDATA[Air Native Extension]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[Apache 2.0]]></category>

		<guid isPermaLink="false">http://www.as3gamegears.com/?p=1101</guid>
		<description><![CDATA[ane-device-file-util is a native extension that allows an application to open files with registered application on iOS (e.g Dropbox). Using the extension an application can provide the user with a link or button to open a file, such as a PDF. &#8230; <a href="http://www.as3gamegears.com/air-native-extension/ane-device-file-util/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="https://github.com/katopz/ane-device-file-util" target="_blank">ane-device-file-util</a> is a native extension that allows an application to open files with registered application on iOS (e.g Dropbox). Using the extension an application can provide the user with a link or button to open a file, such as a PDF. When the user clicks that button a native system dialog shows a list of applications able to open that file.</p>
<p>The extension has no control over the list of applications able to open the file, since that is controlled by the system. All it can do is inform that the application wants to open a specific file type.</p>
<p><strong>Sample</strong></p>
<pre class="brush: as3">package
{
import com.debokeh.anes.utils.DeviceFileUtil;

import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;

public class Main extends Sprite
{
	public function Main()
	{
		// for determine ready state
		var tf:TextField;
		addChild(tf = new TextField);
		tf.autoSize = TextFieldAutoSize.LEFT;
		tf.text = "click me!";

		// wait for click
		stage.addEventListener(MouseEvent.CLICK, function():void
		{
			// Example #1 : You will need foo.pdf in document directory
			DeviceFileUtil.openWith("foo.pdf");

			// Example #2 : You will need foo.pdf in document directory
			// DeviceFileUtil.openWith("foo.pdf", DeviceFileUtil.DOCUMENTS_DIR);

			// Example #3 : You will need foo.pdf in application directory
			// DeviceFileUtil.openWith("foo.pdf", DeviceFileUtil.BUNDLE_DIR);
		});
	}
}
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.as3gamegears.com/air-native-extension/ane-device-file-util/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ANE-PhotosAlbum</title>
		<link>http://www.as3gamegears.com/air-native-extension/ane-photosalbum/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ane-photosalbum</link>
		<comments>http://www.as3gamegears.com/air-native-extension/ane-photosalbum/#comments</comments>
		<pubDate>Mon, 10 Jun 2013 12:05:32 +0000</pubDate>
		<dc:creator>Dovyski</dc:creator>
				<category><![CDATA[Air Native Extension]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[Apache 2.0]]></category>

		<guid isPermaLink="false">http://www.as3gamegears.com/?p=1099</guid>
		<description><![CDATA[ANE-PhotosAlbum is a native extension to save image as JPEG or PNG to iOS CameraRoll. The extension saves a new image based on a ByteArray containing the original image data (encoded as JPEG or PNG). The save operation dispatches two events, &#8230; <a href="http://www.as3gamegears.com/air-native-extension/ane-photosalbum/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="https://github.com/katopz/ane-photosalbum" target="_blank">ANE-PhotosAlbum</a> is a native extension to save image as JPEG or PNG to iOS CameraRoll. The extension saves a new image based on a ByteArray containing the original image data (encoded as JPEG or PNG). The save operation dispatches two events, one to indicate success and another one to indicate an error occurred.</p>
<p>This extension is useful to create mobile apps where the user must save the result of any graphical operation, such as painting or shooting a photo.</p>
<p><strong>Sample</strong></p>
<pre class="brush: as3">package
{
import com.debokeh.anes.utils.PhotosAlbum;

import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.JPEGEncoderOptions;
import flash.display.Sprite;
import flash.events.ErrorEvent;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.utils.ByteArray;

public class Main extends Sprite
{
	[Embed(source="/../assets/DSC07379.JPG")]
	private var _bitmap_clazz:Class;
	private var _bitmapData:BitmapData = Bitmap(new _bitmap_clazz).bitmapData;

	private var _tf:TextField;

	public function Main()
	{
		addChild(_tf = new TextField);
		_tf.autoSize = TextFieldAutoSize.LEFT;
		_tf.text = "click me!";

		var photosAlbum:PhotosAlbum = new PhotosAlbum();

		stage.addEventListener(MouseEvent.CLICK, function():void
		{
			trace("saveToCameraRoll...");

			_tf.text = "saveToCameraRoll...";

			var ba:ByteArray = new ByteArray();

			// for PNG
			//_bitmapData.encode(_bitmapData.rect, new PNGEncoderOptions(false), ba);

			// for JPG
			_bitmapData.encode(_bitmapData.rect, new JPEGEncoderOptions(100), ba);

			// listen to
			photosAlbum.addEventListener(Event.COMPLETE, onSaveImage);
			photosAlbum.addEventListener(ErrorEvent.ERROR, onSaveImage);

			// then save!
			photosAlbum.saveImage(ba);

			// dispose
			ba.clear();
			ba = null;
		});
	}

	private function onSaveImage(event:Event):void
	{
		trace(event);
		_tf.appendText("\n" + event.toString());
	}
}
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.as3gamegears.com/air-native-extension/ane-photosalbum/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Shporter</title>
		<link>http://www.as3gamegears.com/misc/shporter/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=shporter</link>
		<comments>http://www.as3gamegears.com/misc/shporter/#comments</comments>
		<pubDate>Fri, 07 Jun 2013 11:19:15 +0000</pubDate>
		<dc:creator>Dovyski</dc:creator>
				<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://www.as3gamegears.com/?p=1096</guid>
		<description><![CDATA[Shporter is a Flash extension that exports timeline animation into different formats. It walks over the animation key-frames and exports a Spriter file, which preserves the animation modular data and can be played using any AS3 player such as SpriterMC or &#8230; <a href="http://www.as3gamegears.com/misc/shporter/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://oopstoons.com/projects/shporter/" target="_blank">Shporter</a> is a Flash extension that exports timeline animation into different formats. It walks over the animation key-frames and exports a <a title="Spriter" href="http://www.as3gamegears.com/editors/spriter/" target="_blank" rel="as3gamegears">Spriter</a> file, which preserves the animation modular data and can be played using any AS3 player such as <a title="SpriterMC" href="http://www.as3gamegears.com/animation/spritermc/" target="_blank" rel="as3gamegears">SpriterMC</a> or <a title="SpriterAS" href="http://www.as3gamegears.com/animation/spriteras/" target="_blank" rel="as3gamegears">SpriterAS</a>.</p>
<p>All timeline elements or library items used in the animation are exported as PNG files. It also tries to choose the best key-frames to export, reducing the size of the exported Spriter file.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.as3gamegears.com/misc/shporter/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>ANE-Google-Analytics</title>
		<link>http://www.as3gamegears.com/air-native-extension/ane-google-analytics/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ane-google-analytics</link>
		<comments>http://www.as3gamegears.com/air-native-extension/ane-google-analytics/#comments</comments>
		<pubDate>Wed, 05 Jun 2013 11:03:40 +0000</pubDate>
		<dc:creator>Dovyski</dc:creator>
				<category><![CDATA[Air Native Extension]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[MIT]]></category>

		<guid isPermaLink="false">http://www.as3gamegears.com/?p=1093</guid>
		<description><![CDATA[ANE-Google-Analytics is a native extension to use Google Analytics on the iOS and Android platforms. Differently from other Google Analytics wrappers, this extension is not Javascript based, so it works with AIR apps. The extension follow closely the original Analytics SDK methods &#8230; <a href="http://www.as3gamegears.com/air-native-extension/ane-google-analytics/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="https://github.com/alebianco/ANE-Google-Analytics" target="_blank">ANE-Google-Analytics</a> is a native extension to use Google Analytics on the iOS and Android platforms. Differently from other Google Analytics wrappers, this extension is not Javascript based, so it works with AIR apps. The extension follow closely the original Analytics SDK methods and functionalities, so it should be easy to use and understand.</p>
<p>Among other features, the extension allows the tracking of page views and events. All tracking is performed within the scope of a session, so the developer must explicitly start and stop the session. All tracking data must be sent while the session is active.</p>
<p><strong>Sample</strong></p>
<pre class="brush: as3">import eu.alebianco.air.extensions.analytics.GATracker;

if (GATracker.isSupported()) {
    var tracker:GATracker = GATracker.getInstance();
    tracker.startNewSession("UA-00000000-0", interval);
    tracker.trackPageView("/custom/view/url");
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.as3gamegears.com/air-native-extension/ane-google-analytics/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Google Play Games</title>
		<link>http://www.as3gamegears.com/air-native-extension/google-play-games/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=google-play-games</link>
		<comments>http://www.as3gamegears.com/air-native-extension/google-play-games/#comments</comments>
		<pubDate>Mon, 03 Jun 2013 16:46:03 +0000</pubDate>
		<dc:creator>Dovyski</dc:creator>
				<category><![CDATA[Air Native Extension]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Commercial]]></category>

		<guid isPermaLink="false">http://www.as3gamegears.com/?p=1090</guid>
		<description><![CDATA[Google Play Games is a native extension that enables the use of Google&#8217;s game services on Android. The extension provides unified leaderboards, achievements and authentication in Google Play. It is possible to authenticate Android users within the games,  submit high &#8230; <a href="http://www.as3gamegears.com/air-native-extension/google-play-games/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.milkmangames.com/blog/tools/#gpg" target="_blank">Google Play Games</a> is a native extension that enables the use of Google&#8217;s game services on Android. The extension provides unified leaderboards, achievements and authentication in Google Play.</p>
<p>It is possible to authenticate Android users within the games,  submit high scores, unlock achievements (managing incremental achievement progress),  show native Google Play achievements and leaderboard views,  load achievement and score data as ActionScript objects to create your own custom views.</p>
<p><strong>Sample</strong></p>
<pre class="brush: as3">GoogleGames(logCallback:Function = null)
create(logCallback:Function = null):GoogleGames
dispose():void
getCurrentPlayerId():String
incrementAchievement(achievementId:String, numSteps:int):void
isSignedIn():Boolean
isSupported():Boolean
loadAchievements():void
loadLeaderboardMetadata(leaderboardId:String = null):void
loadScores(leaderboardId:String, timeSpan:int, playerCentered:Boolean = false, forceReload:Boolean = false):void
revealAchievement(achievementId:String):void
showAchievements():void
showLeaderboard(leaderboardId:String = null):void
signIn():void
signOut():void
submitScore(leaderboardId:String, score:int):void
unlockAchievement(achievementId:String):void</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.as3gamegears.com/air-native-extension/google-play-games/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>AS3 Date Range Picker</title>
		<link>http://www.as3gamegears.com/ui/as3-date-range-picker/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=as3-date-range-picker</link>
		<comments>http://www.as3gamegears.com/ui/as3-date-range-picker/#comments</comments>
		<pubDate>Fri, 31 May 2013 11:06:49 +0000</pubDate>
		<dc:creator>Dovyski</dc:creator>
				<category><![CDATA[UI]]></category>
		<category><![CDATA[Mozilla Public 1.1]]></category>

		<guid isPermaLink="false">http://www.as3gamegears.com/?p=1087</guid>
		<description><![CDATA[AS3 Date Range Picker is a component to select a date range using a visual calendar. The component renders two textfields, each one containing a date icon. The user can input the date using the textfield directly or by clicking &#8230; <a href="http://www.as3gamegears.com/ui/as3-date-range-picker/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="https://github.com/nidin/as3-date-range-picker" target="_blank">AS3 Date Range Picker</a> is a component to select a date range using a visual calendar. The component renders two textfields, each one containing a date icon. The user can input the date using the textfield directly or by clicking any of the icons.</p>
<p>When the date icon is clicked a small dialog containing two side by side calendars are presented. On the left calendar the user can choose the beginning of the date range, on the right it&#8217;s possible to select the end of the range. The days within the range are highlighted with a different color.</p>
<p><strong>Sample</strong></p>
<pre class="brush: as3">package  
{
import flash.display.Sprite;
import nid.events.CalendarEvent;
import nid.ui.controls.DateRangePicker;
/**
 * ...
 * @author Nidin P Vinayakan
 */
public class DateRangePickerDemo extends Sprite
{
	private var dateRangePicker:DateRangePicker;

	public function DateRangePickerDemo() {
		dateRangePicker = new DateRangePicker();
		dateRangePicker.dateFormat = "M/D/Y";
		dateRangePicker.x = 20
		dateRangePicker.y = 20
		dateRangePicker.startDate = new Date(2012, 11, 15);
		dateRangePicker.endDate = new Date();
		dateRangePicker.addEventListener(CalendarEvent.DATE_RANGE_CHANGE, onDateRangeChange);
		dateRangePicker.addEventListener(CalendarEvent.APPLY, onApply);
		addChild(dateRangePicker);
	}

	private function onApply(e:CalendarEvent):void {
		trace(e.selectedDateRange);
		trace("Start Date:" + dateRangePicker.startDate);
		trace("End Date:" + dateRangePicker.endDate);
	}

	private function onDateRangeChange(e:CalendarEvent):void {
		trace(e.selectedDateRange);
		trace("Start Date:" + dateRangePicker.startDate);
		trace("End Date:" + dateRangePicker.endDate);
	}	
}
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.as3gamegears.com/ui/as3-date-range-picker/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>as3-image-library</title>
		<link>http://www.as3gamegears.com/misc/as3-image-library/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=as3-image-library</link>
		<comments>http://www.as3gamegears.com/misc/as3-image-library/#comments</comments>
		<pubDate>Wed, 29 May 2013 12:04:21 +0000</pubDate>
		<dc:creator>Dovyski</dc:creator>
				<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://www.as3gamegears.com/?p=1085</guid>
		<description><![CDATA[as3-image-library is a collection of image encoding algorithms. The lib currently supports the encoding process of BitmapData into PNG and JPEG images with Pixel density (DPI). A bitmap is supplied to the lib and, according to the encoder, a ByteArray is returned &#8230; <a href="http://www.as3gamegears.com/misc/as3-image-library/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="https://github.com/nidin/as3-image-library" target="_blank">as3-image-library</a> is a collection of image encoding algorithms. The lib currently supports the encoding process of <code>BitmapData</code> into PNG and JPEG images with Pixel density (DPI). A bitmap is supplied to the lib and, according to the encoder, a <code>ByteArray</code> is returned (with the encoded image data).</p>
<p>This lib is useful to create, for instance, drawing apps with custom export settings where the user can choose the type of the output file. If performance becomes a problem, the <code>BitmapData</code> class can <a href="http://help.adobe.com/en_US/as3/dev/WS4768145595f94108-17913eb4136eaab51c7-8000.html" target="_blank">natively compress</a> data since Flash Player 11.3 and AIR 3.3.</p>
<p><strong>Sample</strong></p>
<pre class="brush: as3">var bmp_data:BitmapData = new BitmapData(500, 500, false, 0xff0000);
var png:ByteArray = PNGEncoder.encode(bmp_data, 150);//150 is pixel density in inches (dpi)

var jpgEncoder:JPEGEncoder = new JPEGEncoder()
var jpg:ByteArray = jpgEncoder.encode(bitmap.bitmapData, 300);</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.as3gamegears.com/misc/as3-image-library/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
