<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>masputih</title>
	
	<link>http://masputih.com</link>
	<description>Coder for Hire</description>
	<lastBuildDate>Mon, 24 May 2010 08:48:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/masputih" /><feedburner:info uri="masputih" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Creating Drag-and-Drop for AS3 Isolib</title>
		<link>http://feedproxy.google.com/~r/masputih/~3/3J_V8cmUQFY/creating-drag-and-drop-for-as3-isolib</link>
		<comments>http://masputih.com/2010/05/creating-drag-and-drop-for-as3-isolib#comments</comments>
		<pubDate>Mon, 24 May 2010 08:18:40 +0000</pubDate>
		<dc:creator>Anggie Bratadinata</dc:creator>
				<category><![CDATA[ActionScript 3]]></category>

		<guid isPermaLink="false">http://masputih.com/2010/05/creating-drag-and-drop-for-as3-isolib</guid>
		<description><![CDATA[Some folks had asked about drag-and-drop mechanism in as3isolib discussion group. While there’s no such feature built-in in the library, it’s not hard to write it yourself. So here’s a super simple class that provides that mechanism, called DragManager. I borrowed the idea from Flex’s DragManager. Note that this class is really a simple one [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>Some folks had asked about drag-and-drop mechanism in <a title="AS3 Isometric Engine" href="http://code.google.com/p/as3isolib/">as3isolib</a> <a title="discussion group" href="http://tech.groups.yahoo.com/group/as3isolib/">discussion group</a>. While there’s no such feature built-in in the library, it’s not hard to write it yourself.</p>
<p>So here’s a super simple class that provides that mechanism, called DragManager. I borrowed the idea from Flex’s DragManager. Note that this class is really a simple one and it doesn’t respect “grid” so you’ll have to modify it if you want to use it in a grid-based isometric space.  Trust me, it’s not too hard <img src='http://masputih.com/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  </p>
<div id="attachment_738" class="wp-caption aligncenter" style="width: 300px">
	<a href="http://masputih.com/wordpress/wp-content/uploads/2010/05/dd.swf"><img src="http://masputih.com/wordpress/wp-content/uploads/2010/05/isodd-300x223.jpg" alt="" title="DragManagerDemo" width="300" height="223" class="size-medium wp-image-738" /></a>
	<p class="wp-caption-text">Click to see the demo</p>
</div>
<p><span id="more-736"></span></p>
<p>And here’s the class:</p>
<pre class="brush:as3">
package masputih.isometric.utils
{
	import as3isolib.core.IsoDisplayObject;
	import as3isolib.display.IsoView;
	import flash.display.Bitmap;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.geom.Point;

	/**
	 * ...
	 * @author Anggie Bratadinata
	 */
	public class DragManager
	{

		private var _proxy:Sprite;
		private var _view:IsoView;
		private var _obj:IsoDisplayObject;

		public function drag(obj:IsoDisplayObject, view:IsoView):void
		{

			_view = view;
			_obj = obj;

			var bmp:Bitmap = new Bitmap(_obj.getRenderData().bitmapData)
			bmp.x = -_obj.length;
			bmp.y = -_obj.height;

			_proxy = new Sprite();
			_proxy.alpha = .5;
			_proxy.addChild(bmp);
			_proxy.addEventListener(Event.ENTER_FRAME, onProxyEnterFrame);
			_view.addChild(_proxy);

			_view.stage.addEventListener(MouseEvent.MOUSE_UP, drop);
		}

		private function onProxyEnterFrame(e:Event):void
		{
			if (_proxy != null)
			{
				_proxy.x = _view.mouseX;
				_proxy.y = _view.mouseY;
			}

		}

		private function drop(e:Event = null):void
		{
			var p:Point = new Point(_proxy.x, _proxy.y);
			p = _view.localToIso(p);

			_obj.moveTo(p.x, p.y, 0);

			//clean up
			_view.removeChild(_proxy);
			_view.stage.removeEventListener(MouseEvent.MOUSE_UP, drop);
			_proxy.removeEventListener(Event.ENTER_FRAME, onProxyEnterFrame);
			_proxy = null

		}

		public function get obj():IsoDisplayObject { return _obj; }

		/**********************************************
		 * SINGLETON CTOR
		 **********************************************/

		private static var _instance:DragManager;
		public function DragManager(enf:SingletonEnforcer)
		{

		}
		public static function getInstance():DragManager{
			if(_instance == null) _instance = new DragManager(new SingletonEnforcer());
			return _instance;
		}

	}

}

class SingletonEnforcer{};
</pre>
<h3>Sample Usage</h3>
<pre class="brush:as3">
package
{

	import as3isolib.core.IsoDisplayObject;
	import as3isolib.display.IsoView;
	import as3isolib.display.primitive.IsoBox;
	import as3isolib.display.primitive.IsoRectangle;
	import as3isolib.display.scene.IsoGrid;
	import as3isolib.display.scene.IsoScene;
	import as3isolib.graphics.SolidColorFill;
	import eDpLib.events.ProxyEvent;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import masputih.isometric.utils.DragManager;

	/**
	 * Main class
	 * @author
	 */
	public class DDTest extends Sprite
	{

		public var view:IsoView;
		public var scene:IsoScene;
		public var grid:IsoGrid;

		public function DDTest()
		{
			addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
		}

		private function onAddedToStage(e:Event):void
		{
			removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);

			view = new IsoView();
			view.setSize(600, 400);
			view.showBorder = true;

			addChild(view);

			scene = new IsoScene();
			view.addScene(scene);

			grid = new IsoGrid();
			grid.cellSize = 400;
			grid.setGridSize(1, 1);

			scene.addChild(grid);

			view.pan(0, 200);

			var obj1:IsoBox = new IsoBox();
			obj1.setSize(20, 20, 20);
			obj1.moveTo(100, 100, 0);
			obj1.fill = new SolidColorFill(0xFFFF80, 1);
			obj1.container.mouseChildren = false;
			obj1.addEventListener(MouseEvent.MOUSE_DOWN, onIsoObjMouseDown);

			var obj2:IsoRectangle = new IsoRectangle();
			obj2.setSize(20, 20,0);
			obj2.moveTo(200, 100, 0);
			obj2.fill = new SolidColorFill(0x0080FF, 1);
			obj2.container.mouseChildren = false;
			obj2.addEventListener(MouseEvent.MOUSE_DOWN, onIsoObjMouseDown);

			var obj3:IsoBox = new IsoBox();
			obj3.setSize(20, 40,30);
			obj3.moveTo(200, 200, 0);
			obj3.fill = new SolidColorFill(0x800040, 1);
			obj3.container.mouseChildren = false;
			obj3.addEventListener(MouseEvent.MOUSE_DOWN, onIsoObjMouseDown);

			scene.addChild(obj1);
			scene.addChild(obj2);
			scene.addChild(obj3);

			stage.addEventListener(Event.ENTER_FRAME, render);
		}

		private function onIsoObjMouseDown(e:ProxyEvent):void
		{
			DragManager.getInstance().drag(IsoDisplayObject(e.target), view);
		}

		private function render(e:Event):void
		{
			view.render(true);
		}

	}

}</pre>
<p>Hope you like it!</p>

<p><a href="http://feedads.g.doubleclick.net/~a/nt3vxgxJgHbhs6fz33qphBDhuqI/0/da"><img src="http://feedads.g.doubleclick.net/~a/nt3vxgxJgHbhs6fz33qphBDhuqI/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/nt3vxgxJgHbhs6fz33qphBDhuqI/1/da"><img src="http://feedads.g.doubleclick.net/~a/nt3vxgxJgHbhs6fz33qphBDhuqI/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/masputih/~4/3J_V8cmUQFY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://masputih.com/2010/05/creating-drag-and-drop-for-as3-isolib/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://masputih.com/2010/05/creating-drag-and-drop-for-as3-isolib</feedburner:origLink></item>
		<item>
		<title>Beli ebook murah di O’Reilly</title>
		<link>http://feedproxy.google.com/~r/masputih/~3/Qeyw0Fz6tH4/beli-ebook-murah-di-oreilly</link>
		<comments>http://masputih.com/2010/05/beli-ebook-murah-di-oreilly#comments</comments>
		<pubDate>Mon, 24 May 2010 06:49:07 +0000</pubDate>
		<dc:creator>Anggie Bratadinata</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://masputih.com/?p=734</guid>
		<description><![CDATA[Minggu lalu ada promo gila di O’reilly. 1 ebook, judul apapun, diobral $10. Jadi deh beli 4 ebook. Lucunya karena promo ini server mereka overloaded jadi ada order yg ga langsung muncul di account. Yang muncul juga ga bisa diunduh. Lumayan, $40 dapet 4 buku. Kalo ga pas promo, harga totalnya bisa lebih dari $100.]]></description>
			<content:encoded><![CDATA[<p></p><p>Minggu lalu ada promo gila di O’reilly. 1 ebook, judul apapun, diobral $10. Jadi deh beli 4 ebook. </p>
<p>Lucunya karena promo ini server mereka <em>overloaded</em> jadi ada order yg ga langsung muncul di <em>account</em>. Yang muncul juga ga bisa diunduh.</p>
<div id="attachment_733" class="wp-caption aligncenter" style="width: 300px">
	<a href="http://masputih.com/wordpress/wp-content/uploads/2010/05/oreilly.jpg" class="thickbox"><img src="http://masputih.com/wordpress/wp-content/uploads/2010/05/oreilly-300x152.jpg" alt="" title="Ready to download!" width="300" height="152" class="size-medium wp-image-733" /></a>
	<p class="wp-caption-text">O’Reilly ebooks </p>
</div>
<p>Lumayan, $40 dapet 4 buku. Kalo ga pas promo, harga totalnya bisa lebih dari $100.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/PTet9frNHhHR_0n81aAvxiCXJRU/0/da"><img src="http://feedads.g.doubleclick.net/~a/PTet9frNHhHR_0n81aAvxiCXJRU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/PTet9frNHhHR_0n81aAvxiCXJRU/1/da"><img src="http://feedads.g.doubleclick.net/~a/PTet9frNHhHR_0n81aAvxiCXJRU/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/masputih/~4/Qeyw0Fz6tH4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://masputih.com/2010/05/beli-ebook-murah-di-oreilly/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://masputih.com/2010/05/beli-ebook-murah-di-oreilly</feedburner:origLink></item>
		<item>
		<title>Array Paginator Class</title>
		<link>http://feedproxy.google.com/~r/masputih/~3/kOsxRi42l78/array-paginator-class</link>
		<comments>http://masputih.com/2010/03/array-paginator-class#comments</comments>
		<pubDate>Thu, 25 Mar 2010 13:17:23 +0000</pubDate>
		<dc:creator>Anggie Bratadinata</dc:creator>
				<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[Freebies]]></category>
		<category><![CDATA[actionscript]]></category>

		<guid isPermaLink="false">http://masputih.com/?p=729</guid>
		<description><![CDATA[Here’s a class to paginate an Array with convenient functions like pageUp(), pageDown(), peek(), etc. package { /** * * @author Anggie Bratadinata */ public class ArrayPaginator { private var _target:Array; private var _pageSize:int = 0; private var _totalPage:int = 0; private var _pageIndex:int = 0; private var _currentPage:Array; private var _targetLength:int; private var _pagedArray:Array; [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>Here’s a class to paginate an Array with convenient functions like <code>pageUp()</code>, <code>pageDown()</code>, <code>peek()</code>, etc.</p>
<p><span id="more-729"></span></p>
<pre class="brush:as3" >
package
{

	/**
	 *
	 * @author Anggie Bratadinata
	 */
	public class ArrayPaginator
	{
		private var _target:Array;
		private var _pageSize:int = 0;
		private var _totalPage:int = 0;

		private var _pageIndex:int = 0;
		private var _currentPage:Array;
		private var _targetLength:int;
		private var _pagedArray:Array;

		public function ArrayPaginator()
		{

		}

		/**
		 * Build a paginated array using a copy of the target array and return the first page.
		 * Later modifications to the target array will not be reflected unless this function is revoked.
		 *
		 * @param	target				The array to be paginated
		 * @param	pageSize			The number of items in each page
		 * @param 	forceFullContent	Force all pages to contain equal number of items
		 * @param	pageFiller			Object to fill a page that has less number of items than the intended page size. Ignored if forceFullContent is false.
		 * @return
		 */
		public function paginate(target:Array, pageSize:int = 1, forceFullContent:Boolean = false, pageFiller:* = null):Array
		{

			if (pageSize < 1) {
				throw new ArgumentError("pageSize can't be less than 1");
				return;
			}

			_target = target.concat();
			_targetLength = _target.length;
			_pageSize = pageSize;

			_totalPage = Math.ceil(_targetLength / _pageSize);

			if (forceFullContent)
			{
				var fillCount:int = (_totalPage * _pageSize) - _targetLength;

				if (fillCount > 0)
				{
					for (var j:int = 0; j < fillCount; j++)
					{
						_target.push(pageFiller);
					}

					_targetLength = _target.length;
				}
			}

			_pagedArray = [];

			for (var i:int = 0; i < _targetLength; i = i + _pageSize )
			{
				var sub:Array = _target.slice(i, i + _pageSize);
				_pagedArray.push(sub);
			}

			return firstPage;

		}

		/**
		 * Go to a page and get its content.
		 *
		 * @param	pageNum		Page number from 1 to total page.
		 * @return 	Array Page content
		 */
		public function getPage(pageNum:int):Array
		{
			var idx:int = pageNum - 1;
			var a:Array = _pagedArray[idx];

			if (a != null)
			{
				_pageIndex = idx;
				_currentPage = a;
			}

			return a;
		}

		/**
		 * Go to the next page and get its content.
		 * @return Array
		 */
		public function pageUp():Array
		{
			if (currentPageNum == _totalPage)
			{
				return currentPage;
			}

			return getPage(currentPageNum + 1);
		};

		/**
		 * Go to the previous page and get its content.
		 * @return Array
		 */
		public function pageDown():Array
		{
			if (currentPageNum == 1)
			{
				return currentPage;
			}

			return getPage(currentPageNum - 1);
		};

		/**
		 * Get the content of the last page without moving the page pointer.
		 * @return Array
		 */
		public function peekLast():Array
		{
			return peekPage(_totalPage);
		}

		/**
		 * Get the content of the first page without moving the page pointer.
		 * @return Array
		 */
		public function peekFirst():Array
		{
			return peekPage(1);
		}

		/**
		 * Get the content of the next page without moving the page pointer.
		 * @return Array
		 */
		public function peekUp():Array
		{
			return peekPage(currentPageNum + 1);
		}

		/**
		 * Get the content of the previous page without moving the page pointer.
		 * @return Array
		 */
		public function peekDown():Array
		{
			return peekPage(currentPageNum - 1);
		}

		/**
		 * Get the content of a page without moving the page pointer.
		 * @param 	pageNum  Page number from 1 to total page
		 * @return Array
		 */
		public function peekPage(pageNum:int):Array
		{
			var p:Array = _pagedArray[pageNum - 1];
			return p;
		}

		/**
		 * Get all pages.
		 * @return Array
		 */
		public function get pages():Array
		{
			return _pagedArray;
		}

		/**
		 * Go to the last page and get the content
		 * @return Array The page content
		 */
		public function get lastPage():Array
		{
			return getPage(_totalPage);
		};

		/**
		 * Go to the first page and get the content
		 * @return Array The page content
		 */
		public function get firstPage():Array
		{
			return getPage(1);
		};

		/**
		 * Get the current page number
		 */
		public function get currentPageNum():int
		{
			return _pageIndex + 1;
		}

		/**
		 * Get the total number of pages.
		 */
		public function get totalPage():int
		{
			return _totalPage;
		}

		/**
		 * Get the content of the current page.
		 * @return Array
		 */
		public function get currentPage():Array
		{
			return _currentPage;
		}

		/**
		 * True if the current page is the last page
		 */
		public function get isLast():Boolean
		{
			return (currentPageNum == _totalPage);
		}

		/**
		 * True if the current page is the first page
		 */
		public function get isFirst():Boolean
		{
			return (currentPageNum == 1);
		}
	}

}
</pre>
<h4>Sample Usage</h4>
<pre class="brush:as3">
private function onAddedToStage(e:Event):void
{
	removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);

	target = new Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
	paginator = new ArrayPaginator();
	trace("first page " + paginator.paginate(target, 4));
	trace("num of pages " + paginator.totalPage);

	timer = new Timer(3000);
	timer.addEventListener(TimerEvent.TIMER, onTimer);
	timer.start();
}

public var isUp:Boolean = true;

private function onTimer(e:TimerEvent):void
{
	if (paginator.isFirst) {
		isUp = true;
	} else	if(paginator.isLast) {
		isUp = false;
	}

	if (isUp) {
		paginator.pageUp() ;
	}else {
		paginator.pageDown();
	}
	trace('/-------/');
	trace("page " + paginator.currentPageNum + " : " + paginator.currentPage.join(','));
	trace("next page " + paginator.peekUp());
	trace("prev page " + paginator.peekDown());
}
</pre>

<p><a href="http://feedads.g.doubleclick.net/~a/sXJmlFllWbhSbFyvaTf9-PV1PuY/0/da"><img src="http://feedads.g.doubleclick.net/~a/sXJmlFllWbhSbFyvaTf9-PV1PuY/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/sXJmlFllWbhSbFyvaTf9-PV1PuY/1/da"><img src="http://feedads.g.doubleclick.net/~a/sXJmlFllWbhSbFyvaTf9-PV1PuY/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/masputih/~4/kOsxRi42l78" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://masputih.com/2010/03/array-paginator-class/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://masputih.com/2010/03/array-paginator-class</feedburner:origLink></item>
		<item>
		<title>A Teacher Called Me Fake</title>
		<link>http://feedproxy.google.com/~r/masputih/~3/cJaeWjSw7so/a-teacher-called-me-a-fake</link>
		<comments>http://masputih.com/2010/01/a-teacher-called-me-a-fake#comments</comments>
		<pubDate>Thu, 21 Jan 2010 17:32:52 +0000</pubDate>
		<dc:creator>Anggie Bratadinata</dc:creator>
				<category><![CDATA[Daily Life]]></category>

		<guid isPermaLink="false">http://masputih.com/?p=727</guid>
		<description><![CDATA[I’ve been meaning to learn spoken English from native speakers ( my spoken English is badly broken, fyi ). After googling and looking at some e-learning portals, I found one that seems really good with many learners and a huge list of tutors to choose from; Edufire. The best thing I like about it is [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>I’ve been meaning to learn spoken English from native speakers ( my spoken English is badly broken, fyi ). After googling and looking at some e-learning portals, I found one that seems really good with many learners and a huge list of tutors to choose from; <a href="http://edufire.com">Edufire</a>. The best thing I like about it is that there’s no fixed price. Each tutor has his/her own hourly rate, many of them offer free classes too. Great. I don’t want classes so I looked for a teacher whose rate for a private session is within my budget.</p>
<p>Long story short, I requested a private one-on-one tutoring session with someone named K.N., a real English teacher whose profile looks really good. He’d taught dozens of learners, teaches English classes for immigrant students in some college, his students rate him good, and so on. Looked like a perfect tutor. At first, yeah.</p>
<p>After exchanging messages a few times, I and K.N. agreed to do a session on Sunday, around 12.00 pm my time. He said he would like to help me speaking in English without translating what I want to say from my mother language. Cool. So I made the payment through Paypal.<br />
<span id="more-727"></span><br />
I was excited to have my first session until today. A few hours ago I received an email from <a href="http://edufire.com">Edufire</a> that said it’s going to undergo a maintenance on Sunday and I was given an option to reschedule. So I did. I asked K.N for a session next week. </p>
<p>I was upset by his reply.</p>
<p><a href="http://masputih.com/wordpress/wp-content/uploads/2010/01/callmefake.jpg" rel="shadowbox"><img src="http://masputih.com/wordpress/wp-content/uploads/2010/01/callmefake-300x262.jpg" alt="" title="callmefake" width="300" height="262" class="aligncenter size-medium wp-image-728" /></a></p>
<p>What a teacher. He must have been on crack.<br />
I’m now looking for another teacher; who doesn’t suck.</p>
<p>Btw, if you want to learn english or any language (Hindi? Maui? Klingon?) with native speakers, give <a href="http://edufire.com">Edufire</a> a try. There are hundreds of teachers with affordable rates and you’ll get good support from the company too. One of the staff named Marco is so nice. He took care of my problem and refunded my money in no time.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/Qj7g4AGJ-W7sUiVQH5oQOxsDvNM/0/da"><img src="http://feedads.g.doubleclick.net/~a/Qj7g4AGJ-W7sUiVQH5oQOxsDvNM/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/Qj7g4AGJ-W7sUiVQH5oQOxsDvNM/1/da"><img src="http://feedads.g.doubleclick.net/~a/Qj7g4AGJ-W7sUiVQH5oQOxsDvNM/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/masputih/~4/cJaeWjSw7so" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://masputih.com/2010/01/a-teacher-called-me-a-fake/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://masputih.com/2010/01/a-teacher-called-me-a-fake</feedburner:origLink></item>
		<item>
		<title>Scattered Gallery</title>
		<link>http://feedproxy.google.com/~r/masputih/~3/7dYriVsA4eg/scattered-gallery</link>
		<comments>http://masputih.com/2009/12/scattered-gallery#comments</comments>
		<pubDate>Mon, 14 Dec 2009 14:21:48 +0000</pubDate>
		<dc:creator>Anggie Bratadinata</dc:creator>
				<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[Freebies]]></category>

		<guid isPermaLink="false">http://masputih.com/?p=660</guid>
		<description><![CDATA[A free flash gallery with randomly distributed pictures. Written in pure AS3. Compiled with Flex SDK. Uses an XML to specify image URLs and caption text Click on an empty space to randomly redistribute the pictures. Click on a picture to see it in its real size. Click on it again to scale it down. [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>A free flash gallery with randomly distributed pictures. Written in pure AS3. Compiled with Flex SDK.</p>
<ul>
<li>Uses an XML to specify image URLs and caption text</li>
<li>Click on an empty space to randomly redistribute the pictures.</li>
<li>Click on a picture to see it in its real size. Click on it again to scale it down.</li>
<li>Pictures are draggable.</li>
</ul>
<p><span id="more-660"></span><br />
The main code is free to use for any purpose. No warranty. Feel free to ask if you have any questions.</p>
<p>Note that this application uses 3rd-party libraries (TweenLite and MonsterDebugger). Please consult their licenses as well.</p>
<div id="attachment_661" class="wp-caption aligncenter" style="width: 355px">
	<a href="http://labs.masputih.com/scattered-gallery/" rel="shadowbox"><img src="http://masputih.com/wordpress/wp-content/uploads/2009/12/scattered-gallery.jpg" alt="Click to view the demo" title="Scattered Gallery" width="355" height="328" class="size-full wp-image-661" /></a>
	<p class="wp-caption-text">Click to view the demo</p>
</div>
<blockquote>
<h4>Download</h4>
<a href="http://masputih.com/wordpress/wp-content/plugins/download-monitor/download.php?id=scattered-gallery.zip" title="Downloaded 196 times">→ Scattered Gallery</a></blockquote>

<p><a href="http://feedads.g.doubleclick.net/~a/-04lSnzxYHmfiypN7vVlIT39QO0/0/da"><img src="http://feedads.g.doubleclick.net/~a/-04lSnzxYHmfiypN7vVlIT39QO0/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/-04lSnzxYHmfiypN7vVlIT39QO0/1/da"><img src="http://feedads.g.doubleclick.net/~a/-04lSnzxYHmfiypN7vVlIT39QO0/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/masputih/~4/7dYriVsA4eg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://masputih.com/2009/12/scattered-gallery/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://masputih.com/2009/12/scattered-gallery</feedburner:origLink></item>
		<item>
		<title>Tracking Aplikasi Flash dengan Google Analytics</title>
		<link>http://feedproxy.google.com/~r/masputih/~3/YeS73uLdeXg/tracking-aplikasi-flash-dengan-google-analytics</link>
		<comments>http://masputih.com/2009/11/tracking-aplikasi-flash-dengan-google-analytics#comments</comments>
		<pubDate>Sat, 28 Nov 2009 04:25:24 +0000</pubDate>
		<dc:creator>Anggie Bratadinata</dc:creator>
				<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[actionscript]]></category>

		<guid isPermaLink="false">http://masputih.com/?p=558</guid>
		<description><![CDATA[GA for Flash adalah library AS3 yang bisa kita gunakan untuk mengumpulkan data untuk Google Analytics. Library ini sangat gampang dipakai. Kita tinggal membuat objek Tracker dan mengeksekusi tracker.trackPageView(/data/yang/ingin/di/kirim/ke/ga). Berikut ini contoh GA report yang menampilkan hasil tracking mp3 yang dimainkan oleh sebuah aplikasi mp3 player. Contoh code nya: private function init(e:Event):void { removeChild(preloader); if [...]]]></description>
			<content:encoded><![CDATA[<p></p><p><a href="http://code.google.com/p/gaforflash/">GA for Flash</a> adalah library AS3 yang bisa kita gunakan untuk mengumpulkan data untuk Google Analytics. Library ini sangat gampang dipakai. Kita tinggal membuat objek Tracker dan mengeksekusi <code>tracker.trackPageView(/data/yang/ingin/di/kirim/ke/ga)</code>.</p>
<p>Berikut ini contoh GA report yang menampilkan hasil tracking mp3 yang dimainkan oleh sebuah aplikasi mp3 player.</p>
<p><a href="http://masputih.com/uploads/2009/11/ga-report.jpg" rel="shadowbox"><img src="http://masputih.com/uploads/2009/11/ga-report-300x274.jpg" alt="ga-report" title="ga-report" width="300" height="274" class="aligncenter size-medium wp-image-559" /></a></p>
<p><span id="more-558"></span></p>
<p>Contoh code nya:</p>
<pre class="brush:as3">
private function init(e:Event):void
{
	removeChild(preloader);

	if (ExternalInterface.available) {
		tracker = new GATracker( this, "window.pageTracker", "Bridge", true );
	}

	mp3Player.addEventListener("songComplete", onSongComplete);
}

private function onSongComplete(e:Event):void
{

	var song:Object = mp3Player.song;
	try {
		tracker.trackPageview('/'+song.artist + '/' + song.album + '/' + song.name);
	}catch (e:Error) { };
}
</pre>

<p><a href="http://feedads.g.doubleclick.net/~a/k-i-SplYcPEIhXO7W1xF9AoPmTQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/k-i-SplYcPEIhXO7W1xF9AoPmTQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/k-i-SplYcPEIhXO7W1xF9AoPmTQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/k-i-SplYcPEIhXO7W1xF9AoPmTQ/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/masputih/~4/YeS73uLdeXg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://masputih.com/2009/11/tracking-aplikasi-flash-dengan-google-analytics/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://masputih.com/2009/11/tracking-aplikasi-flash-dengan-google-analytics</feedburner:origLink></item>
		<item>
		<title>My gmail account is hijacked!</title>
		<link>http://feedproxy.google.com/~r/masputih/~3/eW0Ty-XpXgU/my-gmail-account-is-hijacked</link>
		<comments>http://masputih.com/2009/09/my-gmail-account-is-hijacked#comments</comments>
		<pubDate>Tue, 08 Sep 2009 23:04:11 +0000</pubDate>
		<dc:creator>Anggie Bratadinata</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://masputih.com/?p=549</guid>
		<description><![CDATA[Someone/something hijacked my gmail account and sent out a nonsense email to a bunch of my contacts. You’re doing a great job protecting your customers, Google.]]></description>
			<content:encoded><![CDATA[<p></p><p>Someone/something hijacked my gmail account and sent out a nonsense email to a bunch of my contacts. </p>
<p>You’re doing a great job protecting your customers, Google.  </p>
<div id="attachment_548" class="wp-caption aligncenter" style="width: 300px">
	<a href="http://masputih.com/uploads/2009/09/hijacked.jpg"><img src="http://masputih.com/uploads/2009/09/hijacked-300x185.jpg" alt="That&#039;s not my IP address!" title="hijacked" width="300" height="185" class="size-medium wp-image-548" /></a>
	<p class="wp-caption-text">That’s not my IP address!</p>
</div>

<p><a href="http://feedads.g.doubleclick.net/~a/yUDYE1eQ-YrLlPuDAm9FtvoV41g/0/da"><img src="http://feedads.g.doubleclick.net/~a/yUDYE1eQ-YrLlPuDAm9FtvoV41g/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/yUDYE1eQ-YrLlPuDAm9FtvoV41g/1/da"><img src="http://feedads.g.doubleclick.net/~a/yUDYE1eQ-YrLlPuDAm9FtvoV41g/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/masputih/~4/eW0Ty-XpXgU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://masputih.com/2009/09/my-gmail-account-is-hijacked/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://masputih.com/2009/09/my-gmail-account-is-hijacked</feedburner:origLink></item>
		<item>
		<title>Manipulasi Tekstur Collada (DAE)</title>
		<link>http://feedproxy.google.com/~r/masputih/~3/wiypCfwHpgQ/manipulasi-tekstur-collada-dae</link>
		<comments>http://masputih.com/2009/08/manipulasi-tekstur-collada-dae#comments</comments>
		<pubDate>Mon, 10 Aug 2009 18:31:09 +0000</pubDate>
		<dc:creator>Anggie Bratadinata</dc:creator>
				<category><![CDATA[Away3D]]></category>
		<category><![CDATA[Demo]]></category>
		<category><![CDATA[actionscript]]></category>

		<guid isPermaLink="false">http://masputih.com/?p=530</guid>
		<description><![CDATA[Berikut ini demo manipulasi tekstur Collada (DAE) secara dinamis pada saat runtime. DAE &#38; texture files are courtesy of Away3D team. package { import away3d.animators.SkinAnimation; import away3d.cameras.Camera3D; import away3d.containers.ObjectContainer3D; import away3d.containers.Scene3D; import away3d.containers.View3D; import away3d.core.base.Mesh; import away3d.core.base.Object3D; import away3d.core.math.Number3D; import away3d.core.utils.Cast; import away3d.loaders.Collada; import away3d.materials.BitmapMaterial; import away3d.materials.TransformBitmapMaterial; import away3d.primitives.Cube; import away3d.primitives.Plane; import br.com.stimuli.loading.BulkLoader; import br.com.stimuli.loading.BulkProgressEvent; [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>Berikut ini demo manipulasi tekstur Collada (DAE) secara dinamis pada saat runtime.</p>
<div id="attachment_532" class="wp-caption aligncenter" style="width: 360px">
	<a href="http://labs.masputih.com/away3d/dae-mat/index.html"><img src="http://masputih.com/uploads/2009/08/dae-mat-demo.jpg" alt="Click to launch" title="dae-mat-demo" width="360" height="360" class="size-full wp-image-532" /></a>
	<p class="wp-caption-text">Click to launch</p>
</div>
<blockquote><p>DAE &amp; texture files are courtesy of Away3D team.</p></blockquote>
<p><span id="more-530"></span></p>
<pre class="brush:as3">package
{
	import away3d.animators.SkinAnimation;
	import away3d.cameras.Camera3D;
	import away3d.containers.ObjectContainer3D;
	import away3d.containers.Scene3D;
	import away3d.containers.View3D;
	import away3d.core.base.Mesh;
	import away3d.core.base.Object3D;
	import away3d.core.math.Number3D;
	import away3d.core.utils.Cast;
	import away3d.loaders.Collada;
	import away3d.materials.BitmapMaterial;
	import away3d.materials.TransformBitmapMaterial;
	import away3d.primitives.Cube;
	import away3d.primitives.Plane;
	import br.com.stimuli.loading.BulkLoader;
	import br.com.stimuli.loading.BulkProgressEvent;
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.geom.Matrix;
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;
	import flash.utils.getTimer;

	public class Main extends Sprite{

		public var daeFile:String = "mario_testrun.dae";
		public var daeTexture:String = "assets/mario_tex.jpg";
		public var floorTexture:String = "assets/floor.jpg";

		public var cam:Camera3D;
		public var scene:Scene3D;
		public var view:View3D;
		public var collada:Collada;
		public var model:ObjectContainer3D;
		public var skinAnim:SkinAnimation;
		public var mesh:Mesh;

		public var floor:Plane;

		//material variables
		public var colladaMaterial:BitmapMaterial;
		public var floorMaterial:TransformBitmapMaterial;

		//drawing pane
		public var materialSprite:Sprite;

		public var ldr:BulkLoader;

		public var loadStatus:TextField;

		public function Main() {

			loadStatus = new TextField();
			loadStatus.textColor = 0xFFFFFF;
			loadStatus.autoSize = TextFieldAutoSize.RIGHT;
			addChild(loadStatus);

			if (stage) loadAssets();
			else addEventListener(Event.ADDED_TO_STAGE, loadAssets);
		}

//----------------------------------------------------------- LOAD STUFF	

		private function loadAssets(e:Event = null):void {

			removeEventListener(Event.ADDED_TO_STAGE, loadAssets);

			ldr = new BulkLoader('assets');

			ldr.logLevel = BulkLoader.LOG_INFO;

			ldr.add(daeTexture, { id:"texture", type:BulkLoader.TYPE_IMAGE } );
			ldr.add(floorTexture, { id:"floor", type:BulkLoader.TYPE_IMAGE } );
			ldr.add(daeFile, { id:"dae", type:BulkLoader.TYPE_XML } );

			ldr.addEventListener(BulkProgressEvent.PROGRESS, handleBulkLoaderEvents);
			ldr.addEventListener(BulkProgressEvent.COMPLETE, handleBulkLoaderEvents);

			ldr.start(1);
		}

		private function handleBulkLoaderEvents(e:BulkProgressEvent):void {
			if (e.type == BulkProgressEvent.PROGRESS) {

				loadStatus.text = "loading ..." + (BulkLoader.truncateNumber(e.percentLoaded,2) * 100) +"%";

				return;
			}
			if (e.type == BulkProgressEvent.COMPLETE) {

				loadStatus.x = 200;
				loadStatus.text = "<<< draw lines with your mouse here";

				initEngine();

				initFloor(ldr.getBitmap("floor"));

				initObjects(ldr.getXML("dae"), ldr.getBitmap("texture"));

			}

		}

//----------------------------------------------------------- INIT

		private function initEngine():void {

			scene = new Scene3D();

			cam = new Camera3D();
			cam.lookAt(new Number3D(0, 0, 0));
			cam.moveUp(100);
			cam.moveBackward(400);

			view = new View3D();
			view.x = stage.stageWidth / 2;
			view.y = stage.stageHeight / 2;
			view.camera = cam;
			view.scene = scene;
			view.mouseZeroMove = true;
			addChild(view);

		}

		private function initFloor(material:Bitmap):void {

			floorMaterial = new TransformBitmapMaterial(material.bitmapData);
			floorMaterial.repeat = true;

			floor = new Plane();
			floor.width = 400;
			floor.height = 400;
			floor.material = floorMaterial;

			scene.addChild(floor);
		}

		private function initObjects(dae:XML,material:Bitmap):void {

			colladaMaterial = new BitmapMaterial(material.bitmapData);

			collada = new Collada();
			collada.scaling = 10;

			/**
			 * [1] If you do this, you can't assign a new material later on. Dunno why.
			 *
			 *   collada.material = colladaMaterial;
			 *
			 * Do [2] instead.
			 */

			model = collada.parse(dae) as ObjectContainer3D;

			//[2]
			Mesh(model.getChildByName('polySurface1')).material = colladaMaterial;

			scene.addChild(model);

			skinAnim = model.animationLibrary.getAnimation("default").animation as SkinAnimation;

			addEventListener(Event.ENTER_FRAME, render);

			initDrawingPane(material);
		}

//----------------------------------------------------------- DRAWING PANE		

		private function initDrawingPane(material:Bitmap):void {

			materialSprite = new Sprite();
			materialSprite.addChild(new Bitmap(material.bitmapData));
			materialSprite.scaleX = materialSprite.scaleY = .2;
			addChild(materialSprite);

			var drawingLayer:Sprite = new Sprite();
			drawingLayer.name = "drawingLayer";
			materialSprite.addChild(drawingLayer);

			materialSprite.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
		}

		private function onMouseDown(e:MouseEvent):void {

			var drawingLayer:Sprite = materialSprite.getChildByName('drawingLayer') as Sprite;
			drawingLayer.graphics.lineStyle(1, 0xFFFFFF);
			drawingLayer.graphics.moveTo(e.localX, e.localY);
			materialSprite.addEventListener(MouseEvent.MOUSE_MOVE, drawLine);
			stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
		}

		private function drawLine(e:MouseEvent):void {
			var drawingLayer:Sprite = materialSprite.getChildByName('drawingLayer') as Sprite;
			drawingLayer.graphics.lineTo(e.localX, e.localY);
		}

		private function onMouseUp(e:MouseEvent):void {
			if (materialSprite.hasEventListener(MouseEvent.MOUSE_MOVE)){
				materialSprite.removeEventListener(MouseEvent.MOUSE_MOVE, drawLine);

				var bd:BitmapData = new BitmapData(materialSprite.width, materialSprite.height);
				var mat:Matrix = new Matrix(materialSprite.scaleX, 0, 0, materialSprite.scaleY);
				bd.draw(materialSprite,mat);

				//This won't work if you assign the material to the collada instance like [1]
				Mesh(model.getChildByName('polySurface1')).material = new BitmapMaterial(bd);

			}
		}

//----------------------------------------------------------- RENDER

		private function render(e:Event):void {
			model.rotationY += 10;
			//update the collada animation
			skinAnim.update(getTimer() * 2 / 1000);
			view.render();
		}
	}
}</pre>
<div class="box dl_box">Download source : <a href="http://masputih.com/wordpress/wp-content/plugins/download-monitor/download.php?id=dae-mat.rar" title="Downloaded 257 times">→ dae-mat.rar</a></div>

<p><a href="http://feedads.g.doubleclick.net/~a/vphyplkCCL4UBjME8FS8vTSe48c/0/da"><img src="http://feedads.g.doubleclick.net/~a/vphyplkCCL4UBjME8FS8vTSe48c/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/vphyplkCCL4UBjME8FS8vTSe48c/1/da"><img src="http://feedads.g.doubleclick.net/~a/vphyplkCCL4UBjME8FS8vTSe48c/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/masputih/~4/wiypCfwHpgQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://masputih.com/2009/08/manipulasi-tekstur-collada-dae/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://masputih.com/2009/08/manipulasi-tekstur-collada-dae</feedburner:origLink></item>
		<item>
		<title>Bekerja dengan FlashDevelop, Flex SDK, dan Flash</title>
		<link>http://feedproxy.google.com/~r/masputih/~3/65OP00oiiZw/flashdevelop-flex-sdk-flash</link>
		<comments>http://masputih.com/2009/07/flashdevelop-flex-sdk-flash#comments</comments>
		<pubDate>Wed, 15 Jul 2009 06:59:25 +0000</pubDate>
		<dc:creator>Anggie Bratadinata</dc:creator>
				<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[practice]]></category>

		<guid isPermaLink="false">http://masputih.com/?p=482</guid>
		<description><![CDATA[Dalam artikel kali ini saya jelaskan cara bekerja dengan FlashDevelop, Flex SDK, dan Flash CS3/4. Flex SDK saya pakai untuk kompilasi proyek karena jauh lebih cepat daripada compiler bawaan Flash IDE. Di sini, Flash IDE saya gunakan untuk membuat library berisi objek visual, atau biasa disebut asset library. SWF yg saya buat dengan Flash IDE [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>Dalam artikel kali ini saya jelaskan cara bekerja dengan FlashDevelop, Flex SDK, dan Flash CS3/4. Flex SDK saya pakai untuk kompilasi proyek karena jauh lebih cepat daripada <em>compiler</em> bawaan Flash IDE.</p>
<p>Di sini, Flash IDE saya gunakan untuk membuat <em>library</em> berisi objek visual, atau biasa disebut <em>asset library</em>. SWF yg saya buat dengan Flash IDE hanya berisi sedikit kode atau malah nggak ada kode sama sekali. Kode program utama saya buat dengan FlashDevelop dan saya kompilasi dengan Flex <em>compiler</em>.</p>
<p>Ada 2 cara untuk menggabungkan <em>asset library</em> dengan program utama yaitu:</p>
<p><span id="more-482"></span></p>
<ol>
<li>Dengan teknik <em>embedding</em> dimana SWF yang berisi aset dikompilasi jadi satu dengan program utama</li>
<li><em>Runtime asset</em> dimana SWF yang berisi aset dibuat terpisah dari program utama dan nanti dimuat pada saat program dijalankan.</li>
</ol>
<p>Kalo Anda ingin nyoba sendiri, pastikan dulu instalasi FlashDevelop sudah benar &amp; <em>path</em> Flex SDK sudah diset melalui menu Tools-&gt;Program Settings-&gt;AS3 Context.</p>
<p>Berikut ini direktori project yang saya buat di FlashDevelop.</p>
<p><a href="http://masputih.com/uploads/2009/07/proj-folder.jpg"><img src="http://masputih.com/uploads/2009/07/proj-folder.jpg" alt="proj-folder.jpg" title="proj-folder.jpg" width="281" height="228" class="aligncenter size-full wp-image-479" /></a></p>
<h3>Embedding</h3>
<p>Di dalam direktori /embedded/ saya buat sebuah file .fla yang berisi asset yang akan saya gunakan.</p>
<p>Ada dua MovieClip di dalamnya, masing-masing punya dynamic textfield dengan nama instance labelTxt. Keduanya juga saya beri linkage name sesuai dengan nama symbolnya.</p>
<p><a href="http://masputih.com/uploads/2009/07/symbols-1.jpg"><img src="http://masputih.com/uploads/2009/07/symbols-1.jpg" alt="symbols-1.jpg" title="symbols-1.jpg" width="353" height="244" class="aligncenter size-full wp-image-480" /></a></p>
<p>Setelah saya publish file embed-library.fla, FlashDevelop bisa mengenali <em>linkage</em> kedua symbol tersebut.</p>
<p><a href="http://masputih.com/uploads/2009/07/linkage.jpg"><img src="http://masputih.com/uploads/2009/07/linkage.jpg" alt="linkage.jpg" title="linkage.jpg" width="459" height="214" class="aligncenter size-full wp-image-481" /></a></p>
<p>Kemudian saya buat class <code>BlueSquare</code> dengan <code>labelTxt</code> bertipe <code>flash.text.TextField</code>, sama persis dengan instance yang saya buat di Flash. </p>
<p>Saya letakkan cursor di atas baris <code>public class ...</code> , lalu saya klik kanan simbol <code>Blue</code> di project folder dan klik <em>Insert into document</em>. Hasilnya seperti berikut:</p>
<div id="attachment_488" class="wp-caption aligncenter" style="width: 528px">
	<a href="http://masputih.com/2009/07/flashdevelop-flex-sdk-flash/embed-symbol" rel="attachment wp-att-488"><img src="http://masputih.com/uploads/2009/07/embed-symbol.jpg" alt="Insert into Document" title="embed-symbol" width="528" height="471" class="size-full wp-image-488" /></a>
	<p class="wp-caption-text">Insert into Document</p>
</div>
<p>Kemudian saya buat juga class <code>GreenSquare</code> dengan langkah-langkah sama seperti di atas, tapi yang di–<em>embed</em> adalah simbol <code>Green</code>. </p>
<p>Saya buat instance kedua class tersebut di Main.as.</p>
<pre class="brush:as3">
package
{
	import flash.display.Sprite;
	import flash.events.Event;

	public class Main extends Sprite{

		public function Main():void{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}

		private function init(e:Event = null):void {
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point

			var blue:BlueSquare = new BlueSquare();
			blue.labelTxt.text = "I'm blue";
			addChild(blue);

			var green:GreenSquare = new GreenSquare();
			green.x = blue.width + 10;
			green.labelTxt.text = "I'm green";
			addChild(green);

		}
	}
}
</pre>
<p>Hasilnya:</p>
<div id="attachment_497" class="wp-caption aligncenter" style="width: 369px">
	<a href="http://masputih.com/2009/07/flashdevelop-flex-sdk-flash/embed-output" rel="attachment wp-att-497"><img src="http://masputih.com/uploads/2009/07/embed-output.jpg" alt="Test Movie di FD" title="Hasil Test Movie " width="369" height="141" class="size-full wp-image-497" /></a>
	<p class="wp-caption-text">Test Movie di FD</p>
</div>
<h3>Runtime Asset</h3>
<p>Saya buat file xtlibrary.fla di dalam folder /src/ di FD. SWF hasil kompilasi file ini berisi aset yang akan saya muat pada saat runtime. </p>
<p>Di dalam file ini ada dua simbol mirip dengan file embed-library.fla, tapi berwarna merah dan hitam. Masing-masing simbol saya hubungkan dengan class di dalam folder /flashlib/ — sering disebut <em>Bound Class</em>. Karena kedua class ini berhubungan dengan simbol di .fla, maka saya nggak perlu menggunakan <em>tag</em> <code>[Embed ...]</code> seperti contoh sebelumnya. </p>
<p>Berikut ini seting linkage dari kedua simbol tersebut.</p>
<div id="attachment_502" class="wp-caption aligncenter" style="width: 331px">
	<a href="http://masputih.com/2009/07/flashdevelop-flex-sdk-flash/flashlib-export" rel="attachment wp-att-502"><img src="http://masputih.com/uploads/2009/07/flashlib-export.jpg" alt="Export Setting" title="flashlib-export" width="331" height="260" class="size-full wp-image-502" /></a>
	<p class="wp-caption-text">Export Setting</p>
</div>
<div id="attachment_503" class="wp-caption aligncenter" style="width: 500px">
	<a href="http://masputih.com/2009/07/flashdevelop-flex-sdk-flash/flashlib-linkage" rel="attachment wp-att-503"><img src="http://masputih.com/uploads/2009/07/flashlib-linkage.jpg" alt="Linkage dan Bound Class" title="flashlib-linkage" width="500" height="178" class="size-full wp-image-503" /></a>
	<p class="wp-caption-text">Linkage dan Bound Class</p>
</div>
<p>Supaya simbol tersebut bisa dikenali oleh SWF utama, saya harus meletakkan keduanya di stage dan memberinya nama instance seperti ini:</p>
<div id="attachment_506" class="wp-caption aligncenter" style="width: 457px">
	<a href="http://masputih.com/2009/07/flashdevelop-flex-sdk-flash/flashlib-instance-name" rel="attachment wp-att-506"><img src="http://masputih.com/uploads/2009/07/flashlib-instance-name.jpg" alt="Stage Instance" title="flashlib-instance-name" width="457" height="143" class="size-full wp-image-506" /></a>
	<p class="wp-caption-text">Stage Instance</p>
</div>
<p>File xtlibrary.fla saya publish ke dalam folder di mana SWF utama dari project ini ( fd.swf ) berada yaitu di folder /bin/. Hasilnya seperti gambar berikut:</p>
<div id="attachment_505" class="wp-caption aligncenter" style="width: 247px">
	<a href="http://masputih.com/2009/07/flashdevelop-flex-sdk-flash/xtlibarary-publish" rel="attachment wp-att-505"><img src="http://masputih.com/uploads/2009/07/xtlibarary-publish.jpg" alt="Library SWF" title="xtlibarary-publish" width="247" height="384" class="size-full wp-image-505" /></a>
	<p class="wp-caption-text">Library SWF</p>
</div>
<p>Saya tambahkan beberapa baris kode ke dalam Main class untuk memuat file xtlibrary.swf dan mengakses simbol di atas serta membuat objek Black &amp; Red lalu menampilkannya ( mulai baris 36 ).</p>
<pre class="brush:as3">
package
{
	import flash.display.Loader;
	import flash.display.LoaderInfo;
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.net.URLRequest;
	import flash.system.ApplicationDomain;
	import flash.system.LoaderContext;
	import flash.utils.getDefinitionByName;
	import flash.utils.getQualifiedClassName;
	import flashlib.BlackSquare;
	import flashlib.RedSquare;

	public class Main extends Sprite{

		public function Main():void{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}

		private function init(e:Event = null):void {
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point

			var blue:BlueSquare = new BlueSquare();
			blue.labelTxt.text = "I'm blue";
			addChild(blue);

			var green:GreenSquare = new GreenSquare();
			green.x = blue.width + 10;
			green.labelTxt.text = "I'm green";
			addChild(green);

			var ctx:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);

			var ldr:Loader = new Loader();
			ldr.contentLoaderInfo.addEventListener(Event.INIT, onLoadInit);
			ldr.load(new URLRequest("xtlibrary.swf"), ctx);

		}

		private function onLoadInit(e:Event):void {

			var assetLib:MovieClip = LoaderInfo(e.target).content as MovieClip;

			var redClassName:String = getQualifiedClassName(assetLib['red']);
			var redClassRef:* = getDefinitionByName(redClassName);

			var red:RedSquare = new redClassRef() as RedSquare;
			red.labelTxt.text = "I'm red";
			red.y = 100;
			addChild(red);

			var blackClassName:String = getQualifiedClassName(assetLib['black']);
			var blackClassRef:* = getDefinitionByName(blackClassName);

			var black:BlackSquare = new blackClassRef() as BlackSquare;
			black.labelTxt.text = "I'm black";
			black.y = 100;
			black.x = red.width + 10;
			addChild(black);
		}
	}
}
</pre>
<p>Di dalam kode di atas, saya mengakses instance kedua simbol melalui nama stage instance mereka seperti ini :</p>
<pre class="codeblock"><code>assetLib['red']
assetLib['black']
</code></pre>
<p>Hasil test movie :</p>
<div id="attachment_507" class="wp-caption aligncenter" style="width: 369px">
	<a href="http://masputih.com/2009/07/flashdevelop-flex-sdk-flash/xt-output" rel="attachment wp-att-507"><img src="http://masputih.com/uploads/2009/07/xt-output.jpg" alt="Test Movie dgn library eksternal" title="xt-output" width="369" height="141" class="size-full wp-image-507" /></a>
	<p class="wp-caption-text">Test Movie dgn library eksternal</p>
</div>
<p>Oke, gitu cara saya kerja kalo saya perlu pakai aset yang dibuat dengan Flash.<br />
Semoga bermanfaat. Contoh projectnya bisa diunduh di bawah ini :</p>
<div class="box dl_box"><a href="http://masputih.com/wordpress/wp-content/plugins/download-monitor/download.php?id=fd.rar" title="Downloaded 157 times">→ FD-library.rar</a></div>

<p><a href="http://feedads.g.doubleclick.net/~a/JDzH_P8IeHdg-gbRWL0msgTjwVI/0/da"><img src="http://feedads.g.doubleclick.net/~a/JDzH_P8IeHdg-gbRWL0msgTjwVI/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/JDzH_P8IeHdg-gbRWL0msgTjwVI/1/da"><img src="http://feedads.g.doubleclick.net/~a/JDzH_P8IeHdg-gbRWL0msgTjwVI/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/masputih/~4/65OP00oiiZw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://masputih.com/2009/07/flashdevelop-flex-sdk-flash/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://masputih.com/2009/07/flashdevelop-flex-sdk-flash</feedburner:origLink></item>
		<item>
		<title>Auto-scroll Text Area</title>
		<link>http://feedproxy.google.com/~r/masputih/~3/D6mN-6h3Ii4/auto-scroll-text-area</link>
		<comments>http://masputih.com/2009/06/auto-scroll-text-area#comments</comments>
		<pubDate>Tue, 02 Jun 2009 10:20:18 +0000</pubDate>
		<dc:creator>Anggie Bratadinata</dc:creator>
				<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[component]]></category>

		<guid isPermaLink="false">http://masputih.com/?p=469</guid>
		<description><![CDATA[Berikut ini contoh kode untuk membuat scrollbar komponen fl.controls.TextArea otomatis bergerak ke bawah kalo ada penambahan teks sehingga baris-baris terbaru selalu kelihatan. package { import fl.controls.Button; import fl.controls.TextArea; import fl.controls.TextInput; import fl.events.ComponentEvent; import flash.display.MovieClip; import flash.events.Event; import flash.events.MouseEvent; public class Main extends MovieClip { public var console:TextArea; public var input:TextInput public function Main() { console.text [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>Berikut ini contoh kode untuk membuat <em>scrollbar</em> komponen <code>fl.controls.TextArea</code> otomatis bergerak ke bawah kalo ada penambahan teks sehingga baris-baris terbaru selalu kelihatan.</p>
<p><a href="http://labs.masputih.com/autoscroll_ta/index.html" rel="shadowbox"><img src="http://masputih.com/uploads/2009/06/autoscroll1.jpg" alt="autoscroll" title="autoscroll" width="420" height="333" class="aligncenter size-full wp-image-475" /></a></p>
<p><span id="more-469"></span></p>
<pre class="brush:as3">
package  {

	import fl.controls.Button;
	import fl.controls.TextArea;
	import fl.controls.TextInput;
	import fl.events.ComponentEvent;
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.MouseEvent;

	public class Main extends MovieClip {

		public var console:TextArea;
		public var input:TextInput

		public function Main() {

			console.text = "A\nB\nC\nD\nE\nF\nG\nH\nI\nJ\nK\n";

			console.addEventListener(Event.RENDER, updateScrollPosition);

			input.addEventListener(ComponentEvent.ENTER, addText);

		}

		private function updateScrollPosition(e:Event):void {
			console.verticalScrollPosition = console.maxVerticalScrollPosition;
		}

		private function addText(e:Event):void {
			if (input.length > 0 ) {
				console.appendText(input.text + "\n");
			}
		}

	}

}
</pre>
<div class="box dl_box">
Sourcecode : <a href="http://masputih.com/wordpress/wp-content/plugins/download-monitor/download.php?id=autoscrolltextarea.rar" title="Downloaded 377 times">→ AutoScrollTextArea.rar</a>
</div>

<p><a href="http://feedads.g.doubleclick.net/~a/qYeii3JzsJ8c5aRCLAOevPOllg0/0/da"><img src="http://feedads.g.doubleclick.net/~a/qYeii3JzsJ8c5aRCLAOevPOllg0/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/qYeii3JzsJ8c5aRCLAOevPOllg0/1/da"><img src="http://feedads.g.doubleclick.net/~a/qYeii3JzsJ8c5aRCLAOevPOllg0/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/masputih/~4/D6mN-6h3Ii4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://masputih.com/2009/06/auto-scroll-text-area/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://masputih.com/2009/06/auto-scroll-text-area</feedburner:origLink></item>
	</channel>
</rss>
