<?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:series="http://unfoldingneurons.com/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Activetuts+</title>
	
	<link>http://active.tutsplus.com</link>
	<description>Browser app and game development tutorials, from beginner to advanced</description>
	<lastBuildDate>Wed, 23 May 2012 16:30:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<feedburner:info uri="flashtuts" /><image><link>http://active.tutsplus.com</link><url>http://envato.s3.amazonaws.com/rss_images/activetuts.jpg</url><title>Activetuts+</title></image><feedburner:emailServiceId>Flashtuts</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/flashtuts-freebies" /><feedburner:info uri="flashtuts-freebies" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Create a Facebook Graph API App in Flash: Setup and Design – Tuts+ Premium</title>
		<link>http://feedproxy.google.com/~r/flashtuts-freebies/~3/jfceLFNIYsY/</link>
		<comments>http://active.tutsplus.com/tutorials/actionscript/create-a-facebook-graph-api-app-in-flash-setup-and-design-tuts-premium/#comments</comments>
		<pubDate>Wed, 23 May 2012 16:30:03 +0000</pubDate>
		<dc:creator>Sebastian Bratu</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Browser Apps]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[graph api]]></category>
		<category><![CDATA[Premium]]></category>
		<guid isPermaLink="false">http://active.tutsplus.com/?p=11537</guid>
		<description>&lt;p&gt;In this new mini-series of Premium tutorials, you&amp;#8217;ll learn how to use Flash to build a Facebook Graph API application that can create slideshows for your public pages. This first part covers getting set up with the Facebook AS3 SDK, loading API info into Flash with JSON, and designing the app with Flash Professional.&lt;span id="more-11537"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Premium Preview&lt;/h2&gt;
&lt;div class="tutorial_image"&gt;&lt;a href="https://www.facebook.com/pages/ActiveTuts-TabMakerApp-tutorial/219881841402797?sk=app_283591785046507"&gt;&lt;img src="http://tutsplus.com/wp-content/uploads/2012/05/final_preview.jpg" /&gt;&lt;/a&gt;
&lt;p&gt;Click to try the app on Facebook.&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;This application allows you to select a Facebook album or event list from one of your public pages (not your personal profile) and turn it into a slideshow for your page tab. When the users enter your page, they will see photos from your chosen album, with your photo title and description, or event name, date and invites (for the Event tab).&lt;/p&gt;
&lt;p&gt;In future parts of this series, we’ll create the actual Flash slider that does just that; meanwhile we’ll create the generator for the embed code that will reside at the Facebook application URL.&lt;/p&gt;
&lt;p&gt;You’ll need to be logged in to Facebook in order to see this demo: &lt;a href="https://www.facebook.com/pages/ActiveTuts-TabMakerApp-tutorial/219881841402797?sk=app_283591785046507"&gt;https://apps.facebook.com/activetuts_tabmaker/&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Read the Full Tutorial&lt;/h2&gt;
&lt;p&gt;Premium members can &lt;a href="http://tutsplus.com/tutorial/create-a-facebook-graph-api-app-in-flash-setup-and-design/"&gt;access the full tutorial&lt;/a&gt; right away!&lt;/p&gt;
&lt;p&gt;If you&amp;#8217;re not yet a Premium member, you can still &lt;a href="http://tutsplus.com/tutorial/create-a-facebook-graph-api-app-in-flash-setup-and-design/"&gt;read the first few steps for free&lt;/a&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Tuts+ Premium Membership&lt;/h2&gt;
&lt;p&gt;We run a Premium membership system which periodically gives members access to extra tutorials, like this one, from across the whole Tuts+ network. If you&amp;#8217;re a Premium member, you can &lt;a href="http://tutsplus.com/"&gt;log in and read the tutorial&lt;/a&gt;. If you&amp;#8217;re not a member, you can of course &lt;a href="http://tutsplus.com/join/"&gt;join today&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Also, don&amp;#8217;t forget to follow &lt;a href="http://twitter.com/envatoactive"&gt;@envatoactive on twitter&lt;/a&gt;,  &lt;a href="https://plus.google.com/116404059866243074508"&gt;circle us on Google+&lt;/a&gt;, &lt;a href="http://facebook.com/activetuts"&gt;like us on Facebook&lt;/a&gt;, and grab the &lt;a href="http://feedproxy.google.com/flashtuts"&gt;Activetuts+ RSS Feed&lt;/a&gt; to stay up to date with the latest tutorials and articles.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/YltWGzFMG7hgsJ2jEcXGkAxD0RQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YltWGzFMG7hgsJ2jEcXGkAxD0RQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/YltWGzFMG7hgsJ2jEcXGkAxD0RQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YltWGzFMG7hgsJ2jEcXGkAxD0RQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=UI7pl-zQuH4:9YWFSwxfd08:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=UI7pl-zQuH4:9YWFSwxfd08:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=UI7pl-zQuH4:9YWFSwxfd08:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=UI7pl-zQuH4:9YWFSwxfd08:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=UI7pl-zQuH4:9YWFSwxfd08:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=UI7pl-zQuH4:9YWFSwxfd08:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=UI7pl-zQuH4:9YWFSwxfd08:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=UI7pl-zQuH4:9YWFSwxfd08:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=UI7pl-zQuH4:9YWFSwxfd08:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=UI7pl-zQuH4:9YWFSwxfd08:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Flashtuts/~4/UI7pl-zQuH4" height="1" width="1"/&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=jfceLFNIYsY:9YWFSwxfd08:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=jfceLFNIYsY:9YWFSwxfd08:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?i=jfceLFNIYsY:9YWFSwxfd08:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=jfceLFNIYsY:9YWFSwxfd08:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=jfceLFNIYsY:9YWFSwxfd08:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?i=jfceLFNIYsY:9YWFSwxfd08:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=jfceLFNIYsY:9YWFSwxfd08:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?i=jfceLFNIYsY:9YWFSwxfd08:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/flashtuts-freebies/~4/jfceLFNIYsY" height="1" width="1"/&gt;</description>
		<wfw:commentRss>http://active.tutsplus.com/tutorials/actionscript/create-a-facebook-graph-api-app-in-flash-setup-and-design-tuts-premium/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://active.tutsplus.com/tutorials/actionscript/create-a-facebook-graph-api-app-in-flash-setup-and-design-tuts-premium/</feedburner:origLink><feedburner:origLink>http://feedproxy.google.com/~r/Flashtuts/~3/UI7pl-zQuH4/</feedburner:origLink></item>
		<item>
		<title>Workshop: Google Calendar – Critique</title>
		<link>http://feedproxy.google.com/~r/flashtuts-freebies/~3/VUxcU34dWM4/</link>
		<comments>http://active.tutsplus.com/articles/critique/workshop-google-calendar-critique/#comments</comments>
		<pubDate>Tue, 22 May 2012 15:00:02 +0000</pubDate>
		<dc:creator>Ashish Bogawat</dc:creator>
				<category><![CDATA[Critique]]></category>
		<category><![CDATA[Workshop]]></category>
		<category><![CDATA[app critique]]></category>
		<category><![CDATA[google calendar]]></category>
		<category><![CDATA[tuts-workshop]]></category>
		<guid isPermaLink="false">http://active.tutsplus.com/?p=11529</guid>
		<description>&lt;p&gt;In this week&amp;#8217;s critique, Ashish Bogawat gives us a detailed rundown of &lt;a href="https://www.google.com/calendar/" rel="external"&gt;Google Calendar&lt;/a&gt; &amp;#8211; specifically, its web-based front end.&lt;/p&gt;
&lt;p&gt;&lt;span id="more-11529"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;When it comes to web based calendar apps, pretty much the only name worth mentioning is Google Calendar. A number of contenders have taken a swipe at this category of apps over the years, but they have all either died off or metamorphosed into broader roles like project management or event planning. Google Calendar, meanwhile, has held on to its roots as a dedicated calendar app and has prospered into a ubiquitous web app &amp;#8211; with some help from Gmail and Android. Its direct integration with the popular smartphone operating system and email service means it will continue to hold its top position for a while to come.&lt;/p&gt;
&lt;p&gt;But what I want to discuss today is purely the web-based front end of Google Calendar. If you have been using it for a while, you will no doubt have realized that the app hasn&amp;#8217;t changed much over the years. In times when design trends and standards are changing at a breakneck pace and everyone is feeling the heat to stay ahead of the curve design-wise &amp;#8211; including Basecamp and a whole bunch of industry leading web apps &amp;#8211; Google Calendar has stagnated as far as its UI goes. Let&amp;#8217;s take a look then at how (and whether) it manages to stay relevant.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Intrinsically Google&lt;/h2&gt;
&lt;p&gt;The Google Calendar interface is not unlike most other Google apps &amp;#8211; minimal, flat, low on visual hierarchy and decidedly under-designed. This is a good thing in some cases, bad in others. On a positive note, the interface brings pretty much everything you expect to see in your calendar right on to the surface. &lt;/p&gt;
&lt;p&gt;To the left is a mini month calendar, a list of your calendars, and a pretty visible button to add an event. A predominant portion of the rest of the space is taken up by the actual calendar with events neatly marked out on dates or time slots depending on the view you choose. Flipping between a day, week, month or agenda view is simple and straightforward.&lt;/p&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/articles/104_googleCalendarCritique/google_calendar.png" /&gt;&lt;/div&gt;
&lt;p&gt;Hitting the arrow next to the &amp;#8220;Create&amp;#8221; button brings up an input field to quickly add an event with natural language meta data. So typing in &amp;#8220;Meeting with john@doe.com at Central Park next Monday 4 pm&amp;#8221; actually adds an event for the meeting with John Doe as an invitee, Central Park as the venue and 4 pm the next Monday as the time and date.&lt;/p&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/articles/104_googleCalendarCritique/quick_add.png" /&gt;&lt;/div&gt;
&lt;p&gt;This can be a huge time saver, if you do use the web interface to add events. A big chunk of users don&amp;#8217;t. Thanks to its integration with all kinds of apps and platforms, there are numerous ways in which events can go into Google Calendar, so I usually use it only as a dashboard of what my days look like time-wise. There are some nice touches on that front as well. Click an empty part of an event box on the calendar and a popup will appear with some more details. Hit the event text instead and you are taken to the event page with everything you might want to know or edit about the event.&lt;/p&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/articles/104_googleCalendarCritique/details_popup.png" /&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h2&gt;Built for the Savvy&lt;/h2&gt;
&lt;p&gt;Google Calendar&amp;#8217;s all inclusive, flat interface also proves to be its biggest flaw, depending on what type of user you are. Although the app can feel extremely intuitive to regular, savvy users, it can actually feel extremely overwhelming for first timers. There is simply too much on the screen with little differentiation and visual hierarchy built in to segregate important elements from secondary ones. The virtual lack of icons also doesn&amp;#8217;t help here.&lt;/p&gt;
&lt;p&gt;The interface is also not always very self-explanatory. Here&amp;#8217;s an example: when creating an event, there is an input field labeled &amp;#8220;Where&amp;#8221;. It is not immediately apparent what the ideal contents of this field should be. It was only when I once entered a US address in the field that I realized that Calendar will automatically add a link to the map of the venue when it recognizes the content. Till that point, I used to simply type &amp;#8220;conference room&amp;#8221; or &amp;#8220;skype&amp;#8221; in the field oblivious of it true potential.&lt;/p&gt;
&lt;p&gt;Google&amp;#8217;s new header doesn&amp;#8217;t help matters much either. Sure, you might search for events in your calendar once in a while, but the huge emphasis on the search bar blocking off a big chunk of real estate is not going to make you use it every time. In my 8-10 years of using Calendar, I don&amp;#8217;t for once remember searching for a task. I typically need to look at what&amp;#8217;s coming up in the next few days and the work week view is always enough for that. For longer term goals, there is always the month view.&lt;/p&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/articles/104_googleCalendarCritique/search.png" /&gt;&lt;/div&gt;
&lt;p&gt;Then there are the minor UI niggles that abound in all Google web apps. The &amp;#8220;Save&amp;#8221; button when adding an event is at the top, which means I need to scroll all the way up after finishing entering my details in order to save the event. The sidebar in an events detail page is super confusing with little clarity on list of attendees, adding people, etc.&lt;/p&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/articles/104_googleCalendarCritique/attendees.png" /&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h2&gt;Wrapping Up&lt;/h2&gt;
&lt;p&gt;In the end, Google Calendar is a one-of-its-kind-surviving web app that gets the job done pretty well. Sure, you need some getting used to is and often an engineer&amp;#8217;s degree to figure out everything the app can do for you, but it is usually simple enough for new users who are willing to give it some time to understand the basics. If you don&amp;#8217;t like the flat UI, you might want to give &lt;a href="http://www.iamadtaylor.com/helvetical/" rel="external"&gt;Helvetical&lt;/a&gt; a try to try and spruce up the look a bit. As of now though, I wait for the day when Google will finally give some love to this semi-forgotten app of theirs and give it a much needed experience overhaul.&lt;/p&gt;
&lt;hr/&gt;
&lt;h2&gt;Your Turn&lt;/h2&gt;
&lt;p&gt;What do you think of Google Calendar? Leave your constructive criticism in the comments.&lt;/p&gt;
&lt;p&gt;And if you’ve built a web app that you’d like the Activetuts+ community to do a critique on, &lt;a href="http://www.formstack.com/forms/envato-tuts_workshop"&gt;submit it here&lt;/a&gt;. We’re looking forward to seeing what you’ve made.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/YU29Xhl3J3Z7r2hK340uqBqOE54/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YU29Xhl3J3Z7r2hK340uqBqOE54/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/YU29Xhl3J3Z7r2hK340uqBqOE54/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YU29Xhl3J3Z7r2hK340uqBqOE54/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=RrEZsOruUGI:sBXnD3vcRHA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=RrEZsOruUGI:sBXnD3vcRHA:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=RrEZsOruUGI:sBXnD3vcRHA:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=RrEZsOruUGI:sBXnD3vcRHA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=RrEZsOruUGI:sBXnD3vcRHA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=RrEZsOruUGI:sBXnD3vcRHA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=RrEZsOruUGI:sBXnD3vcRHA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=RrEZsOruUGI:sBXnD3vcRHA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=RrEZsOruUGI:sBXnD3vcRHA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=RrEZsOruUGI:sBXnD3vcRHA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Flashtuts/~4/RrEZsOruUGI" height="1" width="1"/&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=VUxcU34dWM4:sBXnD3vcRHA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=VUxcU34dWM4:sBXnD3vcRHA:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?i=VUxcU34dWM4:sBXnD3vcRHA:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=VUxcU34dWM4:sBXnD3vcRHA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=VUxcU34dWM4:sBXnD3vcRHA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?i=VUxcU34dWM4:sBXnD3vcRHA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=VUxcU34dWM4:sBXnD3vcRHA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?i=VUxcU34dWM4:sBXnD3vcRHA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/flashtuts-freebies/~4/VUxcU34dWM4" height="1" width="1"/&gt;</description>
		<wfw:commentRss>http://active.tutsplus.com/articles/critique/workshop-google-calendar-critique/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://active.tutsplus.com/articles/critique/workshop-google-calendar-critique/</feedburner:origLink><feedburner:origLink>http://feedproxy.google.com/~r/Flashtuts/~3/RrEZsOruUGI/</feedburner:origLink></item>
		<item>
		<title>The Math and ActionScript of Curves: Drawing Quadratic and Cubic Curves</title>
		<link>http://feedproxy.google.com/~r/flashtuts-freebies/~3/PV7jNjHwb4c/</link>
		<comments>http://active.tutsplus.com/tutorials/actionscript/the-math-and-actionscript-of-curves-drawing-quadratic-and-cubic-curves/#comments</comments>
		<pubDate>Mon, 21 May 2012 13:30:40 +0000</pubDate>
		<dc:creator>Kah Shiu Chong</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[curves]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[math]]></category>
		<guid isPermaLink="false">http://active.tutsplus.com/?p=11512</guid>
		<description>&lt;p&gt;We see lines used in a lot of scenarios. Curves are also used, although perhaps not as frequently &amp;#8211; but that doesn&amp;#8217;t undermine their importance! In this tutorial we shall take a closer look at curves, particularly the quadratic and cubic curve, along with some of their commonly used mathematical features.&lt;/p&gt;
&lt;p&gt;&lt;span id="more-11512"&gt;&lt;/span&gt;
&lt;hr /&gt;
&lt;h2&gt;Final Result Preview&lt;/h2&gt;
&lt;p&gt;Let&amp;#8217;s take a look at the final result we will be working towards. Drag the red dots and see the gradients change in position.&lt;/p&gt;
&lt;div class="tutorial_image"&gt;
  &lt;object width="400" height="400" data="http://d2fhka9tf2vaj2.cloudfront.net/tuts/441_curves/milestones/Region_Curve3.swf" type="application/x-shockwave-flash"&gt;&lt;param name="src" value="http://d2fhka9tf2vaj2.cloudfront.net/tuts/441_curves/milestones/Region_Curve3.swf" /&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;p&gt;And here&amp;#8217;s another demo, using cubic curves, without the gradients:&lt;/p&gt;
&lt;div class="tutorial_image"&gt;
  &lt;object width="400" height="400" data="http://d2fhka9tf2vaj2.cloudfront.net/tuts/441_curves/milestones/Region_Curve2.swf" type="application/x-shockwave-flash"&gt;&lt;param name="src" value="http://d2fhka9tf2vaj2.cloudfront.net/tuts/441_curves/milestones/Region_Curve2.swf" /&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;hr/&gt;
&lt;h2&gt;&lt;span&gt;Step 1:&lt;/span&gt; Curves&lt;/h2&gt;
&lt;p&gt;Quadratic and cubic will be featured in each of these sections. So let&amp;#8217;s first look at the equation of curves. These equations are written in polynomial form, starting with the term of highest degree. The first one is quadratic equation (highest degree is 2); the second is cubic equation (highest degree is 3).&lt;br /&gt;
\[f(x) = Ax^2 + Bx + C\ ... (eq\ 1)\]
\[g(x) = Ax^3 + Bx^2 + Cx + D\ ... (eq\ 2)\]
&lt;p&gt; Note that A, B, C and D are real numbers. So now that we are aquainted with it, let&amp;#8217;s try to visualise it. Graphing curves will be our next attempt.&lt;/p&gt;
&lt;hr/&gt;
&lt;h2&gt;&lt;span&gt;Step 2:&lt;/span&gt; Graphing Curves&lt;/h2&gt;
&lt;p&gt;First, let&amp;#8217;s graph a quadratic curve. I&amp;#8217;m sure all readers have graphed quadratic curve in high school math class, but just to refresh your memory, I present graphs below. They are placed side by side to ease comparison.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Left graph is using Cartesian coordinate space&lt;/li&gt;
&lt;li&gt;Right graph  is using Flash coordinate space&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/tuts/441_curves/assets/Graphing_Quadratic.gif" alt="Graphing onto Cartesian and Flash coordinate spaces." /&gt;&lt;/div&gt;
&lt;p&gt;The obvious difference is the inverted y-axis on Flash coordinate space. They look simple overall, right? Okay, now we&amp;#8217;re ready to plot onto Flash coordinate space. &lt;/p&gt;
&lt;hr/&gt;
&lt;h2&gt;&lt;span&gt;Step 3:&lt;/span&gt; Quadratic Coefficients&lt;/h2&gt;
&lt;p&gt;To position quadratic curves at the right spot, we need to understand their corresponding equations. The curve drawn is really dependant on the equation&amp;#8217;s coefficients (for the case of quadratic, those are A, B and C). &lt;/p&gt;
&lt;p&gt;I&amp;#8217;ve included a Flash presentation below so you can easily tweak these coefficients and get immediate feedback.&lt;/p&gt;
&lt;div class="tutorial_image"&gt;
  &lt;object width="600" height="400" data="http://d2fhka9tf2vaj2.cloudfront.net/tuts/441_curves/milestones/Graphing.swf" type="application/x-shockwave-flash"&gt;&lt;param name="src" value="http://d2fhka9tf2vaj2.cloudfront.net/tuts/441_curves/milestones/Graphing.swf" /&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;p&gt;To study the effects of individual coefficients on the overall curve, I suggest following the steps below to experiment with the Flash presentation above.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;While setting A and B to 0, tweak the value of C to both positive and negative values. You&amp;#8217;ll see the line&amp;#8217;s height change.&lt;/li&gt;
&lt;li&gt;Now tweak the value of B between positive and negative values. Observe what happens to gradient of line.&lt;/li&gt;
&lt;li&gt;Now tweak the value of A between positive and negative values, and compare the results.&lt;/li&gt;
&lt;li&gt;Then tweak B between being positive and negative again. Observe the curve&amp;#8217;s always cutting through the origin.&lt;/li&gt;
&lt;li&gt;Finally tweak C. Observe the whole curve shift along the y-axis.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Another interesting observation is that throughout the second and third steps of the above, the point of inflection (i.e. the turning point) stays at the same point on the y-axis.&lt;/p&gt;
&lt;hr/&gt;
&lt;h2&gt;&lt;span&gt;Step 4:&lt;/span&gt; Alternative Equation One&lt;/h2&gt;
&lt;p&gt;You quickly see that positioning a curve is somewhat difficult. The equation used is impractical if we want to, say, locate the coordinates of the lowest point on a curve. &lt;/p&gt;
&lt;p&gt;Solution? We&amp;#8217;ll rewrite the equation into a desired form. Check out the following equation:&lt;/p&gt;
&lt;p&gt;\[f(x) = P(x+Q)^2+R\]
&lt;p&gt;It&amp;#8217;s still a  quadratic equation, but it&amp;#8217;s taken another form. Now we can easily control the minimum and maximum points on the curve. In the previous Flash presentation, click on button &amp;#8220;Approach 1&amp;#8243; on the top right and play with the new values. &lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s a brief explanation of the coefficients&amp;#8217; roles:&lt;/p&gt;
&lt;table width="100%" border="1"&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Coefficient&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Role&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;P&lt;/td&gt;
&lt;td&gt;Control the curve&amp;#8217;s steepness.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Q&lt;/td&gt;
&lt;td&gt;Control displacement of curve&amp;#8217;s turning point along x-axis.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R&lt;/td&gt;
&lt;td&gt;Control displacement of curve&amp;#8217;s turning point along y-axis.&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;Nonetheless, it&amp;#8217;s still a difficult task to make the curve pass through a given set of points. We&amp;#8217;d have to  rigorously pre-calculate on paper before  translating it to code. &lt;/p&gt;
&lt;p&gt;Fortunately, there is a better solution. But before going through it, let&amp;#8217;s have a look at the ActionScript implementation as of now.&lt;/p&gt;
&lt;hr/&gt;
&lt;h2&gt;&lt;span&gt;Step 5:&lt;/span&gt; ActionScript Implementation&lt;/h2&gt;
&lt;p&gt;Here are the equations written as ActionScript functions (check &lt;code&gt;Graphing.as&lt;/code&gt; in the &lt;a href="http://d2fhka9tf2vaj2.cloudfront.net/tuts/441_curves/CurvesSource.zip"&gt;source download&lt;/a&gt;).&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: as3; first-line: 79; title: ; notranslate"&gt;
private function quadratic1(x:Number, A:Number, B:Number, C:Number):Number {
    //y = A(x^2) + B(x) + C
    return A*x*x+ B*x + C
}

private function quadratic2(x:Number, P:Number, Q:Number, R:Number):Number {
    // y = P * (x + Q)^2 + R
    return P*(x+Q)*(x+Q) + R
}
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;And here&amp;#8217;s an implementation of the drawing method using &lt;code&gt;Graphics.drawPath()&lt;/code&gt;. Just a note that all curves in this article are drawn in similar fashion. &lt;/p&gt;
&lt;p&gt;First the variables&amp;#8230;&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: as3; first-line: 18; title: ; notranslate"&gt;
private var points:Vector.&amp;lt;Number&amp;gt; = new Vector.&amp;lt;Number&amp;gt;;
private	var drawCommand:Vector.&amp;lt;int&amp;gt; = new Vector.&amp;lt;int&amp;gt;;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;Now the y-positions, calculated based on the x-positions and the given coefficients.&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: as3; first-line: 64; title: ; notranslate"&gt;
private function redraw(A:Number, B:Number, C:Number):void {
    for (var i:int = 0; i &amp;lt; 400; i++) {
        var x:Number = i - 200;
        points[i * 2] = x * 10 + stage.stageWidth &amp;gt;&amp;gt; 1;
        if (isApproach1) {
            points[i * 2 + 1] = quadratic1(x, A, B, C) + stage.stageHeight &amp;gt;&amp;gt; 1
        }
        else {
            points[i * 2 + 1] = quadratic2(x, A, B, C) + stage.stageHeight &amp;gt;&amp;gt; 1
        }

        if (i == 0) drawCommand[i] = 1;
        else drawCommand[i] = 2;
    }
    graphics.clear();
    graphics.lineStyle(1);
    graphics.drawPath(drawCommand, points);
}
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;(Confused about the &lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt; operator? Take a look at &lt;a href="http://active.tutsplus.com/articles/explanatory/understanding-bitwise-operators/"&gt;this tutorial&lt;/a&gt;.)&lt;/p&gt;
&lt;hr/&gt;
&lt;h2&gt;&lt;span&gt;Step 6:&lt;/span&gt; Alternative Equation Two&lt;/h2&gt;
&lt;p&gt;Suppose we&amp;#8217;re given three points that the quadratic curve must cross through; how do we form the corresponding equation? More specifically, how can we determine the coefficient values of the equation? Linear algebra comes to the rescue. Let&amp;#8217;s analyse this problem.&lt;/p&gt;
&lt;p&gt;We know that quadratic equations always take form as written in eq. 1 in Step 1. &lt;/p&gt;
&lt;p&gt;\[f(x) = Ax^2 + Bx + C\ ... (eq\ 1)\]
&lt;p&gt;Since all three coordinates given are lying on the same curve, they must each satisfy this equation, with the same coefficients as the equation of the curve that we are looking for. Let&amp;#8217;s write this down in equation form.&lt;/p&gt;
&lt;p&gt;Given three coodinates:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;\(S\ \left(S_x,\ S_y\right)\)&lt;/li&gt;
&lt;li&gt;\(T\ \left(T_x,\ T_y\right)\)&lt;/li&gt;
&lt;li&gt;\(U\ \left(U_x,\ U_y\right)\)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Substitute these values into (eq 1). Note that A, B, C are unknowns at the moment.&lt;/p&gt;
&lt;p&gt;\[f(x) = Ax^2 + Bx + C\ ... (eq\ 1)\]
&lt;ul&gt;
&lt;li&gt;\(S_y = A\left(S_x\right)^2 + B\left(S_x\right) + C\ \)&lt;/li&gt;
&lt;li&gt;\(T_y = A\left(T_x\right)^2 + B\left(T_x\right) + C\ \)&lt;/li&gt;
&lt;li&gt;\(U_y = A\left(U_x\right)^2 + B\left(U_x\right) + C\ \)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now, rewrite in matrix form. Take note that A, B, C are the unknowns we are solving for.&lt;/p&gt;
\(
\begin{bmatrix}S_y \\T_y \\U_y\end{bmatrix} =&lt;br /&gt;
\begin{bmatrix}&lt;br /&gt;
\left(S_x\right)^2 &amp;#038; \left(S_x\right) &amp;#038; 1\\&lt;br /&gt;
\left(T_x\right)^2 &amp;#038; \left(T_x\right) &amp;#038; 1\\&lt;br /&gt;
\left(U_x\right)^2 &amp;#038; \left(U_x\right) &amp;#038; 1\end{bmatrix}&lt;br /&gt;
\begin{bmatrix}A \\B \\C\end{bmatrix} \\&lt;br /&gt;
\)
\(
\begin{bmatrix}&lt;br /&gt;
\left(S_x\right)^2 &amp;#038; \left(S_x\right) &amp;#038; 1\\&lt;br /&gt;
\left(T_x\right)^2 &amp;#038; \left(T_x\right) &amp;#038; 1\\&lt;br /&gt;
\left(U_x\right)^2 &amp;#038; \left(U_x\right) &amp;#038; 1\end{bmatrix}^{-1}&lt;br /&gt;
\begin{bmatrix}S_y \\T_y \\U_y\end{bmatrix} =&lt;br /&gt;
\begin{bmatrix}&lt;br /&gt;
\left(S_x\right)^2 &amp;#038; \left(S_x\right) &amp;#038; 1\\&lt;br /&gt;
\left(T_x\right)^2 &amp;#038; \left(T_x\right) &amp;#038; 1\\&lt;br /&gt;
\left(U_x\right)^2 &amp;#038; \left(U_x\right) &amp;#038; 1\end{bmatrix}^{-1}&lt;br /&gt;
\begin{bmatrix}&lt;br /&gt;
\left(S_x\right)^2 &amp;#038; \left(S_x\right) &amp;#038; 1\\&lt;br /&gt;
\left(T_x\right)^2 &amp;#038; \left(T_x\right) &amp;#038; 1\\&lt;br /&gt;
\left(U_x\right)^2 &amp;#038; \left(U_x\right) &amp;#038; 1\end{bmatrix}&lt;br /&gt;
\begin{bmatrix}A \\B \\C\end{bmatrix} \\&lt;br /&gt;
\)
\(
\begin{bmatrix}&lt;br /&gt;
\left(S_x\right)^2 &amp;#038; \left(S_x\right) &amp;#038; 1\\&lt;br /&gt;
\left(T_x\right)^2 &amp;#038; \left(T_x\right) &amp;#038; 1\\&lt;br /&gt;
\left(U_x\right)^2 &amp;#038; \left(U_x\right) &amp;#038; 1\end{bmatrix}^{-1}&lt;br /&gt;
\begin{bmatrix}S_y \\T_y \\U_y\end{bmatrix}&lt;br /&gt;
= I&lt;br /&gt;
\begin{bmatrix}A \\B \\C\end{bmatrix}&lt;br /&gt;
\\&lt;br /&gt;
K^{-1}J = L&lt;br /&gt;
\)
&lt;p&gt;Of course we can use simultaneous equations instead, but I prefer using matrices because it&amp;#8217;s simpler. &lt;em&gt;(Editor&amp;#8217;s note: as long as you understand &lt;a href="http://active.tutsplus.com/tutorials/effects/understanding-affine-transformations-with-matrix-mathematics/"&gt;matrices&lt;/a&gt;, that is!)&lt;/em&gt; &lt;/p&gt;
&lt;p&gt;We&amp;#8217;ll get the inverse of K and multiply by the J matrix to get L. After we have successfully solved for A, B, C, we&amp;#8217;ll just substitute into the quadratic equation. Thus, we&amp;#8217;ll have a quadratic curve that passes through all three points. &lt;/p&gt;
&lt;hr/&gt;
&lt;h2&gt;&lt;span&gt;Step 7:&lt;/span&gt; Importing Coral&lt;/h2&gt;
&lt;p&gt;As mentioned in the previous step, we need to perform a 3&amp;#215;3 matrix inversion and multiplication. ActionScript&amp;#8217;s &lt;code&gt;flash.geom.matrix&lt;/code&gt; class won&amp;#8217;t be able to help in this. Of course, we have a choice to utilise &lt;code&gt;flash.geom.Matrix3D&lt;/code&gt;, class but I prefer the &lt;a href="https://github.com/richardlord/Coral"&gt;Coral&lt;/a&gt; library because I can  pry into these custom classes and examine what&amp;#8217;s happening under the hood. I personally find this very useful whenever at doubt on proper use of commands even after reading the API documentation. &lt;/p&gt;
&lt;p&gt;So download and place the unzipped &lt;a href="https://github.com/richardlord/Coral"&gt;Coral&lt;/a&gt; files into your project source folder.&lt;/p&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/tuts/441_curves/assets/Coral.jpg" alt="Download Coral" /&gt;&lt;/div&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/tuts/441_curves/assets/Integration.jpg" alt="Coral integrated with source folder" /&gt;&lt;/div&gt;
&lt;hr/&gt;
&lt;h2&gt;&lt;span&gt;Step 8:&lt;/span&gt; ActionScript Implementation&lt;/h2&gt;
&lt;p&gt;Here&amp;#8217;s a sample of the result. Try to reposition the red dots and see the quadratic curve redrawn to cross through all three points.&lt;/p&gt;
&lt;div class="tutorial_image"&gt;
  &lt;object width="400" height="400" data="http://d2fhka9tf2vaj2.cloudfront.net/tuts/441_curves/milestones/Draw_Curve.swf" type="application/x-shockwave-flash"&gt;&lt;param name="src" value="http://d2fhka9tf2vaj2.cloudfront.net/tuts/441_curves/milestones/Draw_Curve.swf" /&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;hr/&gt;
&lt;h2&gt;&lt;span&gt;Step 9:&lt;/span&gt; Implementation Explained&lt;/h2&gt;
&lt;p&gt;You can find the full script in &lt;code&gt;Draw_curve.as.&lt;/code&gt; The following ActionScript is just to enable mouse controls on the little dots.&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: as3; first-line: 17; highlight: [30]; title: ; notranslate"&gt;
public function Draw_Curve()
{
    //setting up controls
    c1 = new Circle(0xFF0000); addChild(c1); c1.x = stage.stageWidth * 0.2; c1.y = stage.stageHeight &amp;gt;&amp;gt; 1;
    c2 = new Circle(0xFF0000); addChild(c2); c2.x = stage.stageWidth * 0.5; c2.y = stage.stageHeight &amp;gt;&amp;gt; 1;
    c3 = new Circle(0xFF0000); addChild(c3); c3.x = stage.stageWidth * 0.8; c3.y = stage.stageHeight &amp;gt;&amp;gt; 1;

    c1.addEventListener(MouseEvent.MOUSE_DOWN, move);
    c1.addEventListener(MouseEvent.MOUSE_UP, move);
    c2.addEventListener(MouseEvent.MOUSE_DOWN, move);
    c2.addEventListener(MouseEvent.MOUSE_UP, move);
    c3.addEventListener(MouseEvent.MOUSE_DOWN, move);
    c3.addEventListener(MouseEvent.MOUSE_UP, move);
    redraw()
}

private function move(e:MouseEvent):void {
    if (e.type == &amp;quot;mouseDown&amp;quot;) {
        e.target.startDrag()
        e.target.addEventListener(MouseEvent.MOUSE_MOVE, update);
    }
    else if (e.type == &amp;quot;mouseUp&amp;quot;) {
        e.target.stopDrag();
        e.target.removeEventListener(MouseEvent.MOUSE_MOVE, update);
    }
}

private function update(e:MouseEvent):void {
    redraw();
}
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;The core lies in the &lt;code&gt;redraw&lt;/code&gt; function. I&amp;#8217;ve highlighted the matrix operations and the quadratic function for the redraw process.&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: as3; first-line: 48; highlight: [50,69]; title: ; notranslate"&gt;
private function redraw():void
{
    K = new Matrix3d(	c1.x * c1.x, 	c1.x, 	1, 	0,
                        c2.x * c2.x, 	c2.x, 	1, 	0,
                        c3.x * c3.x, 	c3.x, 	1, 	0,
                                  0,       0,	0, 	1);
    K.invert()
    L = new Matrix3d(	c1.y, 	0, 	0, 	0,
                        c2.y, 	0, 	0, 	0,
                        c3.y, 	0, 	0, 	0,
                           0, 	0, 	0, 	0);
    L.append(K);

    graphics.clear();
    var points:Vector.&amp;lt;Number&amp;gt; = new Vector.&amp;lt;Number&amp;gt;;
    var cmd:Vector.&amp;lt;int&amp;gt; = new Vector.&amp;lt;int&amp;gt;;
    for (var i:int = 0; i &amp;lt; 200; i++) {
        //current x
        var x:Number = i * 2;

        //f(x) = A (x^2) + B (x) + C
        var y:Number = L.n11* x* x + L.n21 * x + L.n31 ;

        points.push(x, y);
        if (i == 0) cmd.push(1);
        else cmd.push(2);
    }
    graphics.lineStyle(1);
    graphics.drawPath(cmd, points);
}
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;So you can see that the matrix K was initialised and inverted before being appended onto matrix J.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;append()&lt;/code&gt; function multiplies the current matrix, J, with the input matrix, K, placed to its left. Another noteworthy detail is that we don&amp;#8217;t utilise all the rows and columns in K and J matrices. However since matrix inversion can only happen with a square matrix, we need to fill in the 4th row, 4th column element of K with 1. (There&amp;#8217;s no need to do this for J because we don&amp;#8217;t need its inversion in our calculation.) Thus, you can see all the other elements are 0 except for the first column.&lt;/p&gt;
&lt;hr/&gt;
&lt;h2&gt;&lt;span&gt;Step 10:&lt;/span&gt; Graphing Cubic Curve&lt;/h2&gt;
&lt;p&gt;So that&amp;#8217;s all for drawing quadratic curves. Let&amp;#8217;s move on to cubic curves.&lt;/p&gt;
&lt;p&gt;Again, we&amp;#8217;ll have a little revision of graphing these curves. Check out the following image:&lt;/p&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/tuts/441_curves/assets/cubic.gif" alt="Cubic graphed on Cartesian and Flash coordinate space." /&gt;&lt;/div&gt;
&lt;p&gt;When you compare this curve to that of quadratic, you will notice that it is steeper, and that a portion of the curve is below the x-axis. One half is mirrored vertically, compared to a quadratic.&lt;/p&gt;
&lt;hr/&gt;
&lt;h2&gt;&lt;span&gt;Step 11:&lt;/span&gt; Cubic Coefficients&lt;/h2&gt;
&lt;p&gt;I&amp;#8217;ve included the following Flash presentation to let you experiment with the coefficients of a cubic equation. Try tweaking the value of A from positive to negative and observe the difference in the curve produced.&lt;/p&gt;
&lt;div class="tutorial_image"&gt;
  &lt;object width="600" height="400" data="http://d2fhka9tf2vaj2.cloudfront.net/tuts/441_curves/milestones/Graphing2.swf" type="application/x-shockwave-flash"&gt;&lt;param name="src" value="http://d2fhka9tf2vaj2.cloudfront.net/tuts/441_curves/milestones/Graphing2.swf" /&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;hr/&gt;
&lt;h2&gt;&lt;span&gt;Step 12:&lt;/span&gt; ActionScript Implementation&lt;/h2&gt;
&lt;p&gt;Here&amp;#8217;s the important section of the implementation of the graphing above:&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: as3; first-line: 53; highlight: [69]; title: ; notranslate"&gt;
private function redraw(A:Number, B:Number, C:Number, D:Number):void {
    for (var i:int = 0; i &amp;lt; 400; i++) {
        var x:Number = i - 200;
        points[i * 2] = x * 10 + stage.stageWidth &amp;gt;&amp;gt; 1;
        points[i * 2 + 1] = cubic1(x, A, B, C, D) + stage.stageHeight &amp;gt;&amp;gt; 1

        if (i == 0) drawCommand[i] = 1;
        else drawCommand[i] = 2;
    }
    graphics.clear();
    graphics.lineStyle(1);
    graphics.drawPath(drawCommand, points);
}

private function cubic1(x:Number, A:Number, B:Number, C:Number, D:Number):Number {
    //y = A(x^3) + B(x^2) + C(x) + D
    return A*x*x*x+ B*x*x + C*x +D
}
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;Again, it&amp;#8217;s difficult to position the cubic curve according to a set of points it crosses through. Once again, we refer to linear algebra for an alternative.&lt;/p&gt;
&lt;hr/&gt;
&lt;h2&gt;&lt;span&gt;Step 13:&lt;/span&gt; Alternative Method&lt;/h2&gt;
&lt;p&gt;We know from Step 6 that the coefficients of a quadratic equation can be calculated based on three given points, and the curve drawn from it will cross through those points. A similar approach can be performed with any &lt;em&gt;four&lt;/em&gt; given points to obtain a cubic equation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;\(S\ \left(S_x,\ S_y\right)\)&lt;/li&gt;
&lt;li&gt;\(T\ \left(T_x,\ T_y\right)\)&lt;/li&gt;
&lt;li&gt;\(U\ \left(U_x,\ U_y\right)\)&lt;/li&gt;
&lt;li&gt;\(V\ \left(V_x,\ V_y\right)\)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Substitute these coordinates into (eq 2). Note that A, B, C, D are unknowns.&lt;/p&gt;
&lt;p&gt;\[g(x) = Ax^3 + Bx^2 + Cx + D\ ... (eq\ 2)\]
&lt;ul&gt;
&lt;li&gt;\(S_y = A\left(S_x\right)^3 + B\left(S_x\right)^2 + C\left(S_x\right) + D\)&lt;/li&gt;
&lt;li&gt;\(T_y = A\left(T_x\right)^3 + B\left(T_x\right)^2 + C\left(T_x\right) + D\)&lt;/li&gt;
&lt;li&gt;\(U_y = A\left(U_x\right)^3 + B\left(U_x\right)^2 + C\left(U_x\right) + D\)&lt;/li&gt;
&lt;li&gt;\(V_y = A\left(V_x\right)^3 + B\left(V_x\right)^2 + C\left(V_x\right) + D\)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But now we&amp;#8217;ll deal with a 4&amp;#215;4 matrix instead of 3&amp;#215;3 matrix:&lt;/p&gt;
&lt;p&gt;\(&lt;br /&gt;
\begin{bmatrix}S_y \\T_y \\U_y \\V_y\end{bmatrix} =&lt;br /&gt;
\begin{bmatrix}&lt;br /&gt;
\left(S_x\right)^3 &amp;#038; \left(S_x\right)^2 &amp;#038; \left(S_x\right) &amp;#038; 1\\&lt;br /&gt;
\left(T_x\right)^3 &amp;#038; \left(T_x\right)^2 &amp;#038; \left(T_x\right) &amp;#038; 1\\&lt;br /&gt;
\left(U_x\right)^3 &amp;#038; \left(U_x\right)^2 &amp;#038; \left(U_x\right) &amp;#038; 1\\&lt;br /&gt;
\left(V_x\right)^3 &amp;#038; \left(V_x\right)^2 &amp;#038; \left(V_x\right) &amp;#038; 1\end{bmatrix}&lt;br /&gt;
\begin{bmatrix}A \\B \\C \\D\end{bmatrix} \\&lt;br /&gt;
P = QR \\&lt;br /&gt;
Q^{-1}P = Q^{-1}QR \\&lt;br /&gt;
Q^{-1}P = IR\\&lt;br /&gt;
Q^{-1}P = R&lt;br /&gt;
\)&lt;/p&gt;
&lt;p&gt;Now we will utilise all elements in the 4&amp;#215;4 matrix for Q and the whole first column for P. Then Q is inversed and applied to P.&lt;/p&gt;
&lt;hr/&gt;
&lt;h2&gt;&lt;span&gt;Step 14:&lt;/span&gt; ActionScript Implementation&lt;/h2&gt;
&lt;p&gt;Again, we set up the mouse controls to allow dragging of those points. When any of those points are being dragged, recalculation and redrawing of the curve constantly happen. &lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: as3; first-line: 15; highlight: [32]; title: ; notranslate"&gt;
public function Draw_Curve2()
{
    //setting up controls
    c1 = new Circle(0xFF0000); addChild(c1); c1.x = stage.stageWidth * 0.2; c1.y = stage.stageHeight &amp;gt;&amp;gt; 1;
    c2 = new Circle(0xFF0000); addChild(c2); c2.x = stage.stageWidth * 0.4; c2.y = stage.stageHeight &amp;gt;&amp;gt; 1;
    c3 = new Circle(0xFF0000); addChild(c3); c3.x = stage.stageWidth * 0.6; c3.y = stage.stageHeight &amp;gt;&amp;gt; 1;
    c4 = new Circle(0xFF0000); addChild(c4); c4.x = stage.stageWidth * 0.8; c4.y = stage.stageHeight &amp;gt;&amp;gt; 1;

    c1.addEventListener(MouseEvent.MOUSE_DOWN, move);
    c1.addEventListener(MouseEvent.MOUSE_UP, move);
    c2.addEventListener(MouseEvent.MOUSE_DOWN, move);
    c2.addEventListener(MouseEvent.MOUSE_UP, move);
    c3.addEventListener(MouseEvent.MOUSE_DOWN, move);
    c3.addEventListener(MouseEvent.MOUSE_UP, move);
    c4.addEventListener(MouseEvent.MOUSE_DOWN, move);
    c4.addEventListener(MouseEvent.MOUSE_UP, move);

    redraw();
}
private function move(e:MouseEvent):void {
    if (e.type == &amp;quot;mouseDown&amp;quot;) {
        e.target.startDrag()
        e.target.addEventListener(MouseEvent.MOUSE_MOVE, update);
    }
    else if (e.type == &amp;quot;mouseUp&amp;quot;) {
        e.target.stopDrag();
        e.target.removeEventListener(MouseEvent.MOUSE_MOVE, update);
    }
}

private function update(e:MouseEvent):void {
    redraw();
}
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;redraw&lt;/code&gt;  is the crucial function where everything happened.&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: as3; first-line: 50; title: ; notranslate"&gt;
private function redraw():void
{
    var left:Matrix3d = new Matrix3d(c1.x * c1.x* c1.x, 	c1.x* c1.x, 	c1.x , 	1,
                                     c2.x * c2.x * c2.x, 	c2.x* c2.x, 	c2.x , 	1,
                                     c3.x * c3.x * c3.x, 	c3.x* c3.x, 	c3.x , 	1,
                                     c4.x * c4.x * c4.x, 	c4.x* c4.x, 	c4.x , 	1);
    left.invert()
    var right:Matrix3d = new Matrix3d(c1.y, 	0, 	0, 	0,
                                      c2.y, 	0, 	0, 	0,
                                      c3.y, 	0, 	0, 	0,
                                      c4.y, 	0, 	0, 	0);
    right.append(left);

    //f(x) = A(x^3) + B (x^2) +C (x) + D
    graphics.clear();
    var points:Vector.&amp;lt;Number&amp;gt; = new Vector.&amp;lt;Number&amp;gt;;
    var cmd:Vector.&amp;lt;int&amp;gt; = new Vector.&amp;lt;int&amp;gt;;
    for (var i:int = 0; i &amp;lt; 200; i++) {
        var x:Number = i * 2;
        var y:Number = right.n11 * x * x * x+
                       right.n21 * x * x+
                       right.n31 * x +
                       right.n41;

        points.push(x, y);
        if (i == 0) cmd.push(1);
        else cmd.push(2);
    }
    graphics.lineStyle(1);
    graphics.drawPath(cmd, points);
}
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;Finally, let&amp;#8217;s look at the product. Click and move the red dots to see cubic curve drawn to pass through all those points.&lt;/p&gt;
&lt;div class="tutorial_image"&gt;
  &lt;object width="400" height="400" data="http://d2fhka9tf2vaj2.cloudfront.net/tuts/441_curves/milestones/Draw_Curve2.swf" type="application/x-shockwave-flash"&gt;&lt;param name="src" value="http://d2fhka9tf2vaj2.cloudfront.net/tuts/441_curves/milestones/Draw_Curve2.swf" /&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;hr/&gt;
&lt;h2&gt;&lt;span&gt;Step 15:&lt;/span&gt; Polynomials of Higher Degree&lt;/h2&gt;
&lt;p&gt;We just gone through drawing polynomials of degree 2 and 3 (quadratic and cubic). From our experience, we can predict that calculation for polynomial of degree 4 (quintic) will require five points, which will require 5&amp;#215;5 matrix, and so on for polynomials of even higher degrees.&lt;/p&gt;
&lt;p&gt;Unfortunately, &lt;code&gt;Coral&lt;/code&gt; and &lt;code&gt;flash.geom.Matrix3D&lt;/code&gt; only allow for 4&amp;#215;4 matrices, so you&amp;#8217;ll have write your own class if the need does come. It&amp;#8217;s seldom required in games, though.&lt;/p&gt;
&lt;hr/&gt;
&lt;h2&gt;&lt;span&gt;Step 16:&lt;/span&gt; Dividing Regions&lt;/h2&gt;
&lt;p&gt;Let&amp;#8217;s try to apply our knowledge to  divide regions on our stage. This requires some revision of  equation inequalities. Check out the image below.&lt;/p&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/tuts/441_curves/assets/regions.jpg" alt="Division of regions" /&gt;&lt;/div&gt;
&lt;p&gt;This image above shows a curve dividing the regions into two:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Blue region on top, where for each point y is greater than the equation of the curve.&lt;/li&gt;
&lt;li&gt;Red region at bottom, where for each point y is less than the equation of the curve.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It&amp;#8217;s not hard to grasp this concept. In fact, you have already experimented on this in Step 11 as you tweaked the coefficients of the cubic formula. Imagine, in the coordinate system, that there is an infinite number of curves, all differentiated by just a slight change in D:&lt;/p&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/tuts/441_curves/assets/curves.jpg" alt="Infinite curves drawn on graph" /&gt;&lt;/div&gt;
&lt;hr/&gt;
&lt;h2&gt;&lt;span&gt;Step 17:&lt;/span&gt; ActionScript Implementation&lt;/h2&gt;
&lt;p&gt;So here&amp;#8217;s the sample of output for quadratic curve. You can try to move the red dot around and see the regions coloured.&lt;/p&gt;
&lt;div class="tutorial_image"&gt;
  &lt;object width="400" height="400" data="http://d2fhka9tf2vaj2.cloudfront.net/tuts/441_curves/milestones/Region_Curve.swf" type="application/x-shockwave-flash"&gt;&lt;param name="src" value="http://d2fhka9tf2vaj2.cloudfront.net/tuts/441_curves/milestones/Region_Curve2.swf" /&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s the important ActionScript snippet. Check out the full script in &lt;code&gt;Region_Curve.as&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: as3; first-line: 57; highlight: [71,72,73,74]; title: ; notranslate"&gt;
private function redraw():void {
    var left:Matrix3d = new Matrix3d(c1.x * c1.x, 	c1.x, 	1, 	0,
                                     c2.x * c2.x, 	c2.x, 	1, 	0,
                                     c3.x * c3.x, 	c3.x, 	1, 	0,
                                     0, 			0, 		0, 	1);
    left.invert()
    var right:Matrix3d = new Matrix3d(c1.y, 	0, 	0, 	0,
                                      c2.y, 	0, 	0, 	0,
                                      c3.y, 	0, 	0, 	0,
                                      0, 	0, 	0, 	0);
    right.append(left);

    //D = A (x^2)+ B (x) +C
    for each (var item: Circle in background) {
        var D:Number = right.n11* item.x * item.x + right.n21 * item.x + right.n31 ;
        //trace(background[i].y);
        if (item.y &amp;gt; D) item.color = 0;
        else item.color = 0xAAAAAA;
    }
}
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;Here&amp;#8217;s the sample with regard to cubic curve.&lt;/p&gt;
&lt;div class="tutorial_image"&gt;
  &lt;object width="400" height="400" data="http://d2fhka9tf2vaj2.cloudfront.net/tuts/441_curves/milestones/Region_Curve2.swf" type="application/x-shockwave-flash"&gt;&lt;param name="src" value="http://d2fhka9tf2vaj2.cloudfront.net/tuts/441_curves/milestones/Region_Curve2.swf" /&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;p&gt;And the implementation that comes with it. Again, full script&amp;#8217;s in &lt;code&gt;Region_Curve2.as&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: as3; first-line: 72; title: ; notranslate"&gt;
//D = A + B (x) +C (x^2)
for each (var item: Circle in background) {
    var D:Number = right.n11 * item.x * item.x * item.x;+
                                right.n21 * item.x * item.x +
                                right.n31 * item.x +
                                right.n41
    //trace(background[i].y);
    if (item.y &amp;gt; D) item.color = 0;
    else item.color = 0xAAAAAA;
}
&lt;/pre&gt;
&lt;/pre&gt;
&lt;hr/&gt;
&lt;h2&gt;&lt;span&gt;Step 18:&lt;/span&gt; Variations&lt;/h2&gt;
&lt;p&gt;How about some tweaks to change the color across different curves? Again, mouse click on the red dots and see the gradient changes across the screen.&lt;/p&gt;
&lt;div class="tutorial_image"&gt;
  &lt;object width="400" height="400" data="http://d2fhka9tf2vaj2.cloudfront.net/tuts/441_curves/milestones/Region_Curve3.swf" type="application/x-shockwave-flash"&gt;&lt;param name="src" value="http://d2fhka9tf2vaj2.cloudfront.net/tuts/441_curves/milestones/Region_Curve3.swf" /&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;hr/&gt;
&lt;h2&gt;&lt;span&gt;Step 19:&lt;/span&gt; ActionScript Implementation&lt;/h2&gt;
&lt;p&gt;Here&amp;#8217;s the important ActionScript snippet extracted from &lt;code&gt;Region_Curve3.as&lt;/code&gt;. First of all we&amp;#8217;ll want to find out the maximum and minimum offset from the original curve.&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: as3; first-line: 72; title: ; notranslate"&gt;
var max:Number = 0;
var min:Number = 0;
var Ds:Vector.&amp;lt;Number&amp;gt; = new Vector.&amp;lt;Number&amp;gt;;

//D = A(x^2) + B (x) +C
for each (var item: Circle in background) {
    var D:Number = right.n11 * item.x * item.x + right.n21 * item.x + right.n31;
    var offset:Number = item.y - D;
    Ds.push(offset);

    if (item.y &amp;gt; D &amp;amp;&amp;amp; offset &amp;gt; max) max = offset;
    else if (item.y &amp;lt; D &amp;amp;&amp;amp; offset &amp;lt; min) min = offset;
}
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt; Once done, we&amp;#8217;ll apply it to colouring the individual dots.&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: as3; first-line: 86; title: ; notranslate"&gt;
//color variations based on the offset
var color:Number
for (var i:int = 0; i &amp;lt; background.length; i++) {
    if (Ds[i] &amp;gt; 0) {
        color = Ds[i] / max * 255							//calculating color to slot in
        background[i].color = color&amp;lt;&amp;lt;16 | color&amp;lt;&amp;lt;8 | color;	//define a grayscale
    }
    else if (Ds[i] &amp;lt; 0)	{
        color = Ds[i] / min * 255;
        background[i].color = color&amp;lt;&amp;lt;16;	//define a gradient of red
    }
}
&lt;/pre&gt;
&lt;/pre&gt;
&lt;hr/&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;So that all for the drawing of curves. Next up, finding roots of a quadratic and cubic curve. Thanks for reading. Do share if you see some real life applications that takes advantage of this tutorial.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-TwbzHuaxFvHk09K4gR4m8U7We8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-TwbzHuaxFvHk09K4gR4m8U7We8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-TwbzHuaxFvHk09K4gR4m8U7We8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-TwbzHuaxFvHk09K4gR4m8U7We8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=Xxa9WHGz_Zg:yslKf6EGqgg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=Xxa9WHGz_Zg:yslKf6EGqgg:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=Xxa9WHGz_Zg:yslKf6EGqgg:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=Xxa9WHGz_Zg:yslKf6EGqgg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=Xxa9WHGz_Zg:yslKf6EGqgg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=Xxa9WHGz_Zg:yslKf6EGqgg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=Xxa9WHGz_Zg:yslKf6EGqgg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=Xxa9WHGz_Zg:yslKf6EGqgg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=Xxa9WHGz_Zg:yslKf6EGqgg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=Xxa9WHGz_Zg:yslKf6EGqgg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Flashtuts/~4/Xxa9WHGz_Zg" height="1" width="1"/&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=PV7jNjHwb4c:yslKf6EGqgg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=PV7jNjHwb4c:yslKf6EGqgg:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?i=PV7jNjHwb4c:yslKf6EGqgg:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=PV7jNjHwb4c:yslKf6EGqgg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=PV7jNjHwb4c:yslKf6EGqgg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?i=PV7jNjHwb4c:yslKf6EGqgg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=PV7jNjHwb4c:yslKf6EGqgg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?i=PV7jNjHwb4c:yslKf6EGqgg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/flashtuts-freebies/~4/PV7jNjHwb4c" height="1" width="1"/&gt;</description>
		<wfw:commentRss>http://active.tutsplus.com/tutorials/actionscript/the-math-and-actionscript-of-curves-drawing-quadratic-and-cubic-curves/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://active.tutsplus.com/tutorials/actionscript/the-math-and-actionscript-of-curves-drawing-quadratic-and-cubic-curves/</feedburner:origLink><feedburner:origLink>http://feedproxy.google.com/~r/Flashtuts/~3/Xxa9WHGz_Zg/</feedburner:origLink></item>
		<item>
		<title>Weekend Lecture: Understanding Games, a Flash Game About Game Design</title>
		<link>http://feedproxy.google.com/~r/flashtuts-freebies/~3/mB6gatDHkIA/</link>
		<comments>http://active.tutsplus.com/tutorials/lectures/weekend-lecture-understanding-games-a-flash-game-about-game-design/#comments</comments>
		<pubDate>Sun, 20 May 2012 16:30:04 +0000</pubDate>
		<dc:creator>Michael James Williams</dc:creator>
				<category><![CDATA[Lectures]]></category>
		<category><![CDATA[game design]]></category>
		<category><![CDATA[understanding games]]></category>
		<guid isPermaLink="false">http://active.tutsplus.com/?p=11508</guid>
		<description>&lt;p&gt;Interested in game design? This weekend, we feature a set of four interactive lectures: games that are about game design, by &lt;a href="http://www.madebypixelate.com/"&gt;Pixelate&lt;/a&gt;.&lt;span id="more-11508"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Play the Games&lt;/h2&gt;
&lt;p&gt;Bub and Bob, two little 8-bit guys, will talk you through the basic concepts of video games. The games themselves are more like interactive tutorials, with smaller games interspersed throughout to help make certain points, and great chiptunes throughout.&lt;/p&gt;
&lt;h3&gt;Episode 1&lt;/h3&gt;
&lt;div class="tutorial_image"&gt;&lt;a href="http://www.madebypixelate.com/games/understanding-games/episode/1"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/articles/103_weekendLectureUnderstandingGames/EpisodeOne.png" alt="Weekend Lecture: Understanding Games" /&gt;&lt;/a&gt;
&lt;p&gt;Click to play.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The first episode deals with rules, interactivity, representation, and simulation in games.&lt;/p&gt;
&lt;h3&gt;Episode 2&lt;/h3&gt;
&lt;div class="tutorial_image"&gt;&lt;a href="http://www.madebypixelate.com/games/understanding-games/episode/2"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/articles/103_weekendLectureUnderstandingGames/EpisodeTwo.png" alt="Weekend Lecture: Understanding Games" /&gt;&lt;/a&gt;
&lt;p&gt;Click to play.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The second episode is about motivating the player to stay in the game, and making sure they have fun.&lt;/p&gt;
&lt;h3&gt;Episode 3&lt;/h3&gt;
&lt;div class="tutorial_image"&gt;&lt;a href="http://www.madebypixelate.com/games/understanding-games/episode/3"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/articles/103_weekendLectureUnderstandingGames/EpisodeThree.png" alt="Weekend Lecture: Understanding Games" /&gt;&lt;/a&gt;
&lt;p&gt;Click to play.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The third episode looks at one of my favourite topics: learning in video games.&lt;/p&gt;
&lt;h3&gt;Episode 4&lt;/h3&gt;
&lt;div class="tutorial_image"&gt;&lt;a href="http://www.madebypixelate.com/games/understanding-games/episode/4"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/articles/103_weekendLectureUnderstandingGames/EpisodeFour.png" alt="Weekend Lecture: Understanding Games" /&gt;&lt;/a&gt;
&lt;p&gt;Click to play.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Finally, the fourth episode is about identification.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rBjnxEe7F7AXv-mexawiWBcylm0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rBjnxEe7F7AXv-mexawiWBcylm0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/rBjnxEe7F7AXv-mexawiWBcylm0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rBjnxEe7F7AXv-mexawiWBcylm0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=9qivK-BDbN8:5cQrkiqaJaI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=9qivK-BDbN8:5cQrkiqaJaI:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=9qivK-BDbN8:5cQrkiqaJaI:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=9qivK-BDbN8:5cQrkiqaJaI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=9qivK-BDbN8:5cQrkiqaJaI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=9qivK-BDbN8:5cQrkiqaJaI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=9qivK-BDbN8:5cQrkiqaJaI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=9qivK-BDbN8:5cQrkiqaJaI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=9qivK-BDbN8:5cQrkiqaJaI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=9qivK-BDbN8:5cQrkiqaJaI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Flashtuts/~4/9qivK-BDbN8" height="1" width="1"/&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=mB6gatDHkIA:5cQrkiqaJaI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=mB6gatDHkIA:5cQrkiqaJaI:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?i=mB6gatDHkIA:5cQrkiqaJaI:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=mB6gatDHkIA:5cQrkiqaJaI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=mB6gatDHkIA:5cQrkiqaJaI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?i=mB6gatDHkIA:5cQrkiqaJaI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=mB6gatDHkIA:5cQrkiqaJaI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?i=mB6gatDHkIA:5cQrkiqaJaI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/flashtuts-freebies/~4/mB6gatDHkIA" height="1" width="1"/&gt;</description>
		<wfw:commentRss>http://active.tutsplus.com/tutorials/lectures/weekend-lecture-understanding-games-a-flash-game-about-game-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://active.tutsplus.com/tutorials/lectures/weekend-lecture-understanding-games-a-flash-game-about-game-design/</feedburner:origLink><feedburner:origLink>http://feedproxy.google.com/~r/Flashtuts/~3/9qivK-BDbN8/</feedburner:origLink></item>
		<item>
		<title>Workshop Coding Challenge: Fix This Breakout Game</title>
		<link>http://feedproxy.google.com/~r/flashtuts-freebies/~3/WeCaYeIhLsI/</link>
		<comments>http://active.tutsplus.com/articles/challenge/workshop-coding-challenge-fix-this-breakout-game/#comments</comments>
		<pubDate>Thu, 17 May 2012 19:00:42 +0000</pubDate>
		<dc:creator>Michael James Williams</dc:creator>
				<category><![CDATA[Challenge]]></category>
		<category><![CDATA[Workshop]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[challenge]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[tuts-workshop]]></category>
		<guid isPermaLink="false">http://active.tutsplus.com/?p=11496</guid>
		<description>&lt;p&gt;It can be tricky to sit down and practise new coding techniques, so here&amp;#8217;s a fun exercise to encourage you to play with collision detection and reaction, &lt;a href="http://active.tutsplus.com/sessions/collision-detection-and-reaction/"&gt;as covered by Kah Shiu&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; I&amp;#8217;ve added an HTML5 version to go alongside the existing Flash version &amp;#8211; enjoy!&lt;/p&gt;
&lt;p&gt;&lt;span id="more-11496"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;The Challenge&lt;/h2&gt;
&lt;p&gt;This breakout game is broken!&lt;/p&gt;
&lt;p&gt;Flash version:&lt;/p&gt;
&lt;div class="tutorial_image"&gt;
  &lt;object width="600" height="400" data="http://d2fhka9tf2vaj2.cloudfront.net/articles/102_breakoutChallenge/ActivetutsBreakoutChallenge.swf" type= "application/x-shockwave-flash"&gt;&lt;param name="src" value="http://d2fhka9tf2vaj2.cloudfront.net/articles/102_breakoutChallenge/ActivetutsBreakoutChallenge.swf" /&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;p&gt;To play the HTML5 version (using canvas and JavaScript), &lt;a href="http://d2fhka9tf2vaj2.cloudfront.net/articles/102_breakoutChallenge/html5/game.html" rel="external"&gt;click here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Oh sure, some of the basics are there; the paddle can be controlled by the left and right arrow keys, the ball moves, and all the objects are drawn to the stage correctly. But there&amp;#8217;s barely any collision detection or reaction: the paddle can move off the sides of the screen, the ball doesn&amp;#8217;t bounce off it, and the bricks might as well not be there at all.&lt;/p&gt;
&lt;p&gt;All the code is available in &lt;a href="http://d2fhka9tf2vaj2.cloudfront.net/articles/102_breakoutChallenge/ActivetutsBreakoutChallengeFlashAndHTML5.zip"&gt;this ZIP file&lt;/a&gt;. (The Flash version is in &lt;a href="http://active.tutsplus.com/tutorials/beginners-guide-to-flashdevelop-intro-basix/"&gt;FlashDevelop&lt;/a&gt; format, but it&amp;#8217;ll be easy to use it in Flash Pro, FDT, Flash Builder, or whatever your IDE of choice is.)&lt;/p&gt;
&lt;p&gt;Once you&amp;#8217;ve familiarised yourself with it, use what Kah Shiu has taught in his &lt;a href="http://active.tutsplus.com/sessions/collision-detection-and-reaction/"&gt;Collision Detection and Reaction Session&lt;/a&gt; to fix the problems with the game. &lt;/p&gt;
&lt;p&gt;You can make this as simple or as complicated as you like, depending on how comfortable you are with the concepts. For instance, you could add triangular bricks, or have multiple balls bouncing around at once.&lt;/p&gt;
&lt;p&gt;Of course, you&amp;#8217;re not restricted to my code or graphics; feel free to change anything you like! &lt;/p&gt;
&lt;p&gt;If you come up with something neat, please send it in using &lt;a href="http://www.formstack.com/forms/envato-tuts_workshop_submission"&gt;this form&lt;/a&gt; or link to it in a comment below. I look forward to checking out what you come up with.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/W_Fr_bmyrMAV40_SgRQDWESUSZ0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/W_Fr_bmyrMAV40_SgRQDWESUSZ0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/W_Fr_bmyrMAV40_SgRQDWESUSZ0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/W_Fr_bmyrMAV40_SgRQDWESUSZ0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=EXkhcRcXS18:OSEeP1KjJAc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=EXkhcRcXS18:OSEeP1KjJAc:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=EXkhcRcXS18:OSEeP1KjJAc:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=EXkhcRcXS18:OSEeP1KjJAc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=EXkhcRcXS18:OSEeP1KjJAc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=EXkhcRcXS18:OSEeP1KjJAc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=EXkhcRcXS18:OSEeP1KjJAc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=EXkhcRcXS18:OSEeP1KjJAc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=EXkhcRcXS18:OSEeP1KjJAc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=EXkhcRcXS18:OSEeP1KjJAc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Flashtuts/~4/EXkhcRcXS18" height="1" width="1"/&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=WeCaYeIhLsI:OSEeP1KjJAc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=WeCaYeIhLsI:OSEeP1KjJAc:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?i=WeCaYeIhLsI:OSEeP1KjJAc:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=WeCaYeIhLsI:OSEeP1KjJAc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=WeCaYeIhLsI:OSEeP1KjJAc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?i=WeCaYeIhLsI:OSEeP1KjJAc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=WeCaYeIhLsI:OSEeP1KjJAc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?i=WeCaYeIhLsI:OSEeP1KjJAc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/flashtuts-freebies/~4/WeCaYeIhLsI" height="1" width="1"/&gt;</description>
		<wfw:commentRss>http://active.tutsplus.com/articles/challenge/workshop-coding-challenge-fix-this-breakout-game/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://active.tutsplus.com/articles/challenge/workshop-coding-challenge-fix-this-breakout-game/</feedburner:origLink><feedburner:origLink>http://feedproxy.google.com/~r/Flashtuts/~3/EXkhcRcXS18/</feedburner:origLink></item>
		<item>
		<title>Enable the Latest AIR SDK in Flash Professional CS5.5+</title>
		<link>http://feedproxy.google.com/~r/flashtuts-freebies/~3/3U4ApjwIfdI/</link>
		<comments>http://active.tutsplus.com/tutorials/workflow/enable-the-latest-air-sdk-in-flash-professional-cs5-5/#comments</comments>
		<pubDate>Wed, 16 May 2012 21:00:50 +0000</pubDate>
		<dc:creator>Daniel Albu</dc:creator>
				<category><![CDATA[Workflow]]></category>
		<category><![CDATA[AIR SDK]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[Flash Professional]]></category>
		<category><![CDATA[Stage3D]]></category>
		<guid isPermaLink="false">http://active.tutsplus.com/?p=11488</guid>
		<description>&lt;p&gt;New versions of the Adobe AIR SDK are often released between Flash Professional release cycles, using this tutorial, you&amp;#8217;ll be able to always use the latest Adobe AIR version in your IDE. This will allow you to enable Stage3D development within Flash Professional for both AIR and SWF projects.&lt;/p&gt;
&lt;p&gt;&lt;span id="more-11488"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Flash Professional CS5.5 Guide&lt;/h2&gt;
&lt;p&gt;(Flash Pro CS6 users, please &lt;a href="#cs6"&gt;skip to the next section&lt;/a&gt;.)&lt;/p&gt;
&lt;hr/&gt;
&lt;h2&gt;&lt;span&gt;Step 1:&lt;/span&gt; Download the Latest SDK&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Download the AIR 3.2 SDK from the following link: &lt;a href="http://www.adobe.com/products/air/sdk/"&gt;http://www.adobe.com/products/air/sdk/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Extract the downloaded file into a separate folder on your desktop&lt;/li&gt;
&lt;/ul&gt;
&lt;hr/&gt;
&lt;h2&gt;&lt;span&gt;Step 2:&lt;/span&gt; Backup Your Current SDK Folder&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Go to the Adobe Flash CS5.5 installation folder (should be &amp;#8220;C:\Program Files\Adobe\Adobe Flash CS5.5&amp;#8243; on 32 bit Windows, &amp;#8220;C:\Program Files (x86)\Adobe\Adobe Flash CS5.5&amp;#8243; on 64 bit Windows, and &amp;#8220;Applications/Adobe Flash CS5.5&amp;#8243; on OS X).&lt;/li&gt;
&lt;li&gt;Rename the &lt;code&gt;AIR2.6&lt;/code&gt; folder to &lt;code&gt;AIR2.6_OLD&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Create a new folder and name it &lt;code&gt;AIR2.6&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr/&gt;
&lt;h2&gt;&lt;span&gt;Step 3:&lt;/span&gt; Create the New SDK Folder&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Copy the contents of the &lt;code&gt;AIR 3.2 SDK&lt;/code&gt; folder (that you’ve created on your desktop) to the &lt;code&gt;AIR2.6&lt;/code&gt; folder.&lt;/li&gt;
&lt;li&gt;Browse to the &lt;code&gt;AIR2.6/frameworks/libs/air/&lt;/code&gt; folder in the Adobe Flash CS5.5 folder and copy the &lt;code&gt;airglobal.swc&lt;/code&gt; file.&lt;/li&gt;
&lt;li&gt;Paste the SWC file into &lt;code&gt;Adobe Flash CS5.5/Common/Configuration/ActionScript 3.0/AIR2.6/&lt;/code&gt;, overwriting the existing &lt;code&gt;airglobal.swc&lt;/code&gt; file.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr/&gt;
&lt;h2&gt;&lt;span&gt;Step 4:&lt;/span&gt; Final Configuration Settings&lt;/h2&gt;
&lt;p&gt;Go to &lt;code&gt;Adobe Flash CS5.5/Common/Configuration/Players/&lt;/code&gt; and open the following files using a text editor (you may need administrative privileges to edit these files in the application folder in Windows):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;AdobeAIR2_6.xml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AiriPhone.xml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Android.xml&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Change the version attribute of the &lt;code&gt;player&lt;/code&gt; element from &lt;code&gt;11&lt;/code&gt; to &lt;code&gt;15&lt;/code&gt; in each file. Don’t forget to save them after you’re done editing. &lt;/p&gt;
&lt;hr /&gt;
&lt;a name="cs6"&gt;&lt;br /&gt;
&lt;h2&gt;Flash Professional CS6 Guide&lt;/h2&gt;
&lt;p&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;After years of not providing users with a more user-friendly way of upgrading the Adobe AIR SDK in Flash, Adobe finally added one to Flash Professional CS6.&lt;/p&gt;
&lt;p&gt;(Please note: since AIR 3.2 is already installed in Flash Professional CS6, we&amp;#8217;ll be using the AIR 3.3 Beta SDK in this section.)&lt;/p&gt;
&lt;hr/&gt;
&lt;h2&gt;&lt;span&gt;Step 1:&lt;/span&gt; Download the Latest Adobe AIR SDK &lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Download the latest SDK from the following link: &lt;a href="http://www.adobe.com/products/air/sdk/"&gt;http://www.adobe.com/products/air/sdk/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Please note: at the time of publishing the latest version was Adobe AIR 3.2 so we&amp;#8217;re using the Adobe AIR 3.3 Beta SDK (&lt;a href="http://labs.adobe.com/downloads/air3-3.html"&gt;http://labs.adobe.com/downloads/air3-3.html&lt;/a&gt;); after its official release this link won&amp;#8217;t work.&lt;/li&gt;
&lt;li&gt;Extract the downloaded file into a separate folder (e.g. &lt;code&gt;C:\AdobeAIR&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr/&gt;
&lt;h2&gt;&lt;span&gt;Step 2:&lt;/span&gt; Link the New SDK Folder to the Flash IDE&lt;/h2&gt;
&lt;p&gt;Go to the help menu and choose the &amp;#8216;Manage AIR SDK&amp;#8217; option&lt;/p&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/tuts/440_airSDK/help.png" alt="CS6 Help Menu" /&gt;&lt;/div&gt;
&lt;p&gt;You&amp;#8217;ll notice a list of your currently installed Adobe SDK folders, the default one in CS6 is Adobe AIR 3.2&lt;/p&gt;
&lt;p&gt;Click the &lt;code&gt;+&lt;/code&gt; button to add a new folder.&lt;/p&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/tuts/440_airSDK/plusButton.png" alt="Add a new SDK Folder" /&gt;&lt;/div&gt;
&lt;p&gt;Choose the new Adobe AIR SDK folder you created (in our example it was &lt;code&gt;C:\AdobeAIR&lt;/code&gt;).&lt;/p&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/tuts/440_airSDK/chooseDirectory.png" alt="CS6 Choose Directory" /&gt;&lt;/div&gt;
&lt;p&gt;You&amp;#8217;ll notice that now we have the new SDK listed as well in our list.&lt;/p&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/tuts/440_airSDK/newList.png" alt="New AIR SDK list" /&gt;&lt;/div&gt;
&lt;hr/&gt;
&lt;h2&gt;&lt;span&gt;Step 3:&lt;/span&gt; Publish&lt;/h2&gt;
&lt;p&gt;Now, in your Publish Settings you&amp;#8217;ll notice you have new options in additional to the old ones &lt;/p&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/tuts/440_airSDK/newAIR.png" alt="New AIR SDK list" /&gt;&lt;/div&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;That’s it! From now on, content you target for AIR using your Flash Professional IDE will be exported using the latest Adobe AIR SDK. Thanks for reading!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/IrlDzey3U70IQ12p5ZSpH8slmNI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IrlDzey3U70IQ12p5ZSpH8slmNI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/IrlDzey3U70IQ12p5ZSpH8slmNI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IrlDzey3U70IQ12p5ZSpH8slmNI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=FVbu9JIOtho:tj7vwW9LHic:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=FVbu9JIOtho:tj7vwW9LHic:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=FVbu9JIOtho:tj7vwW9LHic:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=FVbu9JIOtho:tj7vwW9LHic:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=FVbu9JIOtho:tj7vwW9LHic:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=FVbu9JIOtho:tj7vwW9LHic:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=FVbu9JIOtho:tj7vwW9LHic:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=FVbu9JIOtho:tj7vwW9LHic:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=FVbu9JIOtho:tj7vwW9LHic:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=FVbu9JIOtho:tj7vwW9LHic:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Flashtuts/~4/FVbu9JIOtho" height="1" width="1"/&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=3U4ApjwIfdI:tj7vwW9LHic:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=3U4ApjwIfdI:tj7vwW9LHic:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?i=3U4ApjwIfdI:tj7vwW9LHic:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=3U4ApjwIfdI:tj7vwW9LHic:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=3U4ApjwIfdI:tj7vwW9LHic:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?i=3U4ApjwIfdI:tj7vwW9LHic:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=3U4ApjwIfdI:tj7vwW9LHic:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?i=3U4ApjwIfdI:tj7vwW9LHic:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/flashtuts-freebies/~4/3U4ApjwIfdI" height="1" width="1"/&gt;</description>
		<wfw:commentRss>http://active.tutsplus.com/tutorials/workflow/enable-the-latest-air-sdk-in-flash-professional-cs5-5/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://active.tutsplus.com/tutorials/workflow/enable-the-latest-air-sdk-in-flash-professional-cs5-5/</feedburner:origLink><feedburner:origLink>http://feedproxy.google.com/~r/Flashtuts/~3/FVbu9JIOtho/</feedburner:origLink></item>
		<item>
		<title>Quick Tip: Versioning Your Files With Dropbox (via Webdesigntuts+)</title>
		<link>http://feedproxy.google.com/~r/flashtuts-freebies/~3/tEkk_XgvBt0/</link>
		<comments>http://active.tutsplus.com/articles/news/quick-tip-versioning-your-files-with-dropbox-via-webdesigntuts/#comments</comments>
		<pubDate>Tue, 15 May 2012 16:00:19 +0000</pubDate>
		<dc:creator>Michael James Williams</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[dropbox]]></category>
		<category><![CDATA[google drive]]></category>
		<category><![CDATA[version control]]></category>
		<category><![CDATA[workflow]]></category>
		<guid isPermaLink="false">http://active.tutsplus.com/?p=11475</guid>
		<description>&lt;p&gt;Ian Yates of &lt;a href="http://webdesign.tutsplus.com/"&gt;Webdesigntuts+&lt;/a&gt; has posted a great Quick Tip explaining how you can use Dropbox or Google Drive as a simple, automated version control system. It&amp;#8217;s worth checking out for web app and game developers too, so check it out below.&lt;/p&gt;
&lt;p&gt;&lt;span id="more-11475"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Having a version history of your graphics documents may save you from that awful moment when you realize you’ve scrubbed over a crucial stage of the design process. Thanks to Dropbox, you may already be storing versions of your work without even having noticed&amp;#8230; &lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Dropbox is like a time machine. It keeps snapshots of every change in your Dropbox folder over the last 30 days.&lt;/p&gt;&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;Version History in the Cloud&lt;/h2&gt;
&lt;div class="tutorial_image"&gt;
&lt;iframe src="http://blip.tv/play/htB5gveTawA.html?p=1" width="600" height="369" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;embed type="application/x-shockwave-flash" src="http://a.blip.tv/api.swf#htB5gveTawA" style="display:none"&gt;&lt;/embed&gt;&lt;/p&gt;
&lt;p&gt;You can &lt;a href="http://d3pr5r64n04s3o.cloudfront.net/tuts/328_qt_dropbox/dropbox.mp4.zip" rel="external"&gt;download the video here&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Remember, both Dropbox and Google Drive will keep snapshots of your files for just 30 days, unless you upgrade your account. You can read more of what Google has to say on the matter at &lt;a href="http://support.google.com/drive/bin/answer.py?hl=en&amp;#038;answer=2409045" rel="external"&gt;support.google.com&lt;/a&gt;, or head on over to &lt;a href="https://www.dropbox.com/help/113" rel="external"&gt;Dropbox Help&lt;/a&gt; to read up on their &amp;#8220;Pack-Rat&amp;#8221; pro feature (which gives you indefinite history storage).&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;Useful Resources&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Sign up for &lt;a href="http://enva.to/IpgBqy"&gt;Dropbox&lt;/a&gt; if you haven&amp;#8217;t already!
&lt;li&gt;Sign up for &lt;a href="http://drive.google.com/"&gt;Google Drive&lt;/a&gt;
&lt;li&gt;&lt;a href="http://www.pixelapse.com/" rel="external"&gt;Pixelapse&lt;/a&gt; &amp;#8211; &amp;#8220;Visual version control done right&amp;#8221;.
&lt;li&gt;&lt;a href="http://www.layervault.com/" rel="external"&gt;Layervault&lt;/a&gt; &amp;#8211; &amp;#8220;Unlimited storage, simple version control, team collaboration, and much more&amp;#8221;.
&lt;li&gt;&lt;a href="https://skydrive.live.com/" rel="external"&gt;Microsoft SkyDrive&lt;/a&gt;
&lt;li&gt;&lt;a href="http://www.sugarsync.com/" rel="external"&gt;SugarSync&lt;/a&gt; &amp;#8211; &amp;#8220;..keeps the previous five versions of all your documents.&amp;#8221;
&lt;li&gt;&lt;a href="http://www.idrivesync.com/" rel="external"&gt;iDriveSync&lt;/a&gt; &amp;#8211; &amp;#8220;Protect yourself from &amp;#8216;digital accidents&amp;#8217; with versioning and unlimited file retention&amp;#8221;
&lt;/ul&gt;
&lt;p&gt;And don&amp;#8217;t forget, you can view all the latest articles from across the Tuts+ network at the &lt;a href="http://hub.tutsplus.com/" rel="external"&gt;Tuts+ Hub&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/YoP9uKyKOohs-p74RqHz98fsB_Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YoP9uKyKOohs-p74RqHz98fsB_Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/YoP9uKyKOohs-p74RqHz98fsB_Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YoP9uKyKOohs-p74RqHz98fsB_Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=lycxICDoD2U:tV4lbcr6vQo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=lycxICDoD2U:tV4lbcr6vQo:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=lycxICDoD2U:tV4lbcr6vQo:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=lycxICDoD2U:tV4lbcr6vQo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=lycxICDoD2U:tV4lbcr6vQo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=lycxICDoD2U:tV4lbcr6vQo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=lycxICDoD2U:tV4lbcr6vQo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=lycxICDoD2U:tV4lbcr6vQo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=lycxICDoD2U:tV4lbcr6vQo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=lycxICDoD2U:tV4lbcr6vQo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Flashtuts/~4/lycxICDoD2U" height="1" width="1"/&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=tEkk_XgvBt0:tV4lbcr6vQo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=tEkk_XgvBt0:tV4lbcr6vQo:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?i=tEkk_XgvBt0:tV4lbcr6vQo:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=tEkk_XgvBt0:tV4lbcr6vQo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=tEkk_XgvBt0:tV4lbcr6vQo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?i=tEkk_XgvBt0:tV4lbcr6vQo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=tEkk_XgvBt0:tV4lbcr6vQo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?i=tEkk_XgvBt0:tV4lbcr6vQo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/flashtuts-freebies/~4/tEkk_XgvBt0" height="1" width="1"/&gt;</description>
		<wfw:commentRss>http://active.tutsplus.com/articles/news/quick-tip-versioning-your-files-with-dropbox-via-webdesigntuts/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://active.tutsplus.com/articles/news/quick-tip-versioning-your-files-with-dropbox-via-webdesigntuts/</feedburner:origLink><feedburner:origLink>http://feedproxy.google.com/~r/Flashtuts/~3/lycxICDoD2U/</feedburner:origLink></item>
		<item>
		<title>Workshop: Nuclear Outrun – Critique</title>
		<link>http://feedproxy.google.com/~r/flashtuts-freebies/~3/iJqV0KQmZek/</link>
		<comments>http://active.tutsplus.com/articles/critique/workshop-nuclear-outrun-critique/#comments</comments>
		<pubDate>Mon, 14 May 2012 16:30:01 +0000</pubDate>
		<dc:creator>Porter</dc:creator>
				<category><![CDATA[Critique]]></category>
		<category><![CDATA[Workshop]]></category>
		<category><![CDATA[critique]]></category>
		<category><![CDATA[game critique]]></category>
		<category><![CDATA[nuclear outrun]]></category>
		<category><![CDATA[tuts-workshop]]></category>
		<category><![CDATA[workshop]]></category>
		<guid isPermaLink="false">http://active.tutsplus.com/?p=11471</guid>
		<description>&lt;p&gt;This week, Matt Porter critiques another recently released game: &lt;a href="http://www.kongregate.com/games/nerdook/nuclear-outrun" rel="external"&gt;Nuclear Outrun&lt;/a&gt;, developed by &lt;a href="https://www.facebook.com/pages/Nerdook-Productions/164269730266269" rel="external"&gt;Nerdook Productions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;span id="more-11471"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Play the Game&lt;/h2&gt;
&lt;div class="tutorial_image"&gt;&lt;a href="http://www.kongregate.com/games/nerdook/nuclear-outrun" rel="external"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/articles/100_nuclearOutrunCritique/export-from-game.jpg" alt="Nuclear Outrun Critique and Review" /&gt;&lt;/a&gt;
&lt;p&gt;Click to play Nuclear Outrun on Kongregate&lt;/p&gt;
&lt;/div&gt;
&lt;hr /&gt;
&lt;h2&gt;Overview&lt;/h2&gt;
&lt;p&gt;With 2012 moving along, it&amp;#8217;s no surprise that we&amp;#8217;re starting to see more and more &amp;#8220;end of the world&amp;#8221;-themed games. Nuclear Outrun is one such game, and while it&amp;#8217;s not perfect, it&amp;#8217;s quite enjoyable. It combines physics, zombies, distance, and upgrades, in a simple, yet enjoyable blend. With only one goal &amp;#8211; get to the goal before the nuke hits &amp;#8211; players really can&amp;#8217;t get too confused by what&amp;#8217;s going on. &lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Gameplay&lt;/h2&gt;
&lt;p&gt;As I mentioned above, your goal is simple: reach the goal before the nuke hits and turns you into a smear on the streets. You simply press forward (drive to the right), and shoot what gets in your way. You have 20 trucks (attempts), and with each attempt, you earn experience points which unlock new weapons and reward you with skill points. These skill points can be spent on upgrades, such as cranking up the power and ammunition of your weapons, making your vehicle more beastly, and so on.&lt;/p&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/articles/100_nuclearOutrunCritique/nuclear-outrun-04.png" alt="Nuclear Outrun Critique and Review" /&gt;&lt;/div&gt;
&lt;p&gt;Nuclear Outrun definitely repeats some of the mistakes common to the distance game formula, but it also succeeds where many others have failed. While you start off weak and slowly grow strong, you&amp;#8217;re not entirely crippled by your starting state. Many distance games start you off so weak, that you hardly play the game for the first ten minutes or so, but instead repeat the same simple run over and over, slowly gaining stat points. There is a certain degree of skill in Nuclear Outrun, and you can do well right off, which many other distance games sadly fail to allow. In fact, you can actually complete your goal without getting every upgrade, something most distance games don&amp;#8217;t allow. Doing so makes the game feel extremely linear, gives the player little satisfaction upon completion, and offers zero replay-value. I do wish skill was even more of a factor in Nuclear Outrun, but the leveling up aspect is simply part of the genre; at least it&amp;#8217;s a step in the right direction.&lt;/p&gt;
&lt;p&gt;While the game does use a physics engine, the controls do feel a bit off to me. For whatever reason, I found it far too common that the vehicle was tipped on its back. Even with the ability to adjust individual wheel sizes (such as a large wheel in back, small wheel in front), it was just too easy to end up with your front wheel raised to the sky. This leads to a decrease in the sense of speed (read: fun), and forces players to spend more time balancing their vehicle, rather than focusing on the more enjoyable aspects of the gameplay, such as shooting enemies.&lt;/p&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/articles/100_nuclearOutrunCritique/nuclear-outrun-06.png" alt="Nuclear Outrun Critique and Review" /&gt;&lt;/div&gt;
&lt;p&gt;What Nuclear Outrun does best is give the player complete freedom to choose how they want to play. You choose what weapon you want to use, how your vehicle handles (via wheel sizes), and what upgrades to put your skill points into. When you&amp;#8217;re actually in the game, it&amp;#8217;s up to you whether you want to fly forward full speed, or play it safe at a normal speed and take out all the obstacles.&lt;/p&gt;
&lt;p&gt;While we&amp;#8217;re on a positive note, it&amp;#8217;s also worth mentioning that Nuclear Outrun does a fantastic job of rewarding the player. Even after you complete the game, you get three new weapons, all of which are unique and fun. You&amp;#8217;re also rewarded with “Overtime” mode, which allows you to continue playing while competing for high scores. Nearly all web games, huge hits included, fail to reward players after the game is “completed”. It&amp;#8217;s extremely important that you give players something extra to reward them, as it increases replay value, and lets the player know you care. Simply saying “Congratulations!” on your final screen is insulting, and doesn&amp;#8217;t help you stand out.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Graphics&lt;/h2&gt;
&lt;p&gt;The graphics in Nuclear Outrun are pretty average. They have a simple yet effective style, but I personally find the whole package a bit unpolished, and lacking in detail. There&amp;#8217;s a lot of weapons and effects, so it&amp;#8217;s understandable that each one isn&amp;#8217;t in extreme detail, but there&amp;#8217;s definitely room for improvement. The animation is simple, but like the graphics, it&amp;#8217;s quite effective. Nothing really stands out as &lt;em&gt;poor&lt;/em&gt;; it&amp;#8217;s just nothing pretty.&lt;/p&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/articles/100_nuclearOutrunCritique/nuclear-outrun-03.png" alt="Nuclear Outrun Critique and Review" /&gt;&lt;/div&gt;
&lt;p&gt;The menus and UI in my opinion are a bit too messy. There&amp;#8217;s a lot of stray or unorganized text, which leads to confusion as to what information is where. The pre-game menu could be greatly improved by moving the level and high score elsewhere, and perhaps making it a bit smaller. All of the text is also just thrown on screen, and isn&amp;#8217;t placed with any artistic value. All in all, there&amp;#8217;s just too much text, with little thought into how it&amp;#8217;s displayed, and it looks messy.&lt;/p&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/articles/100_nuclearOutrunCritique/nucleer-outrun-02.png" alt="Nuclear Outrun Critique and Review" /&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h2&gt;Audio&lt;/h2&gt;
&lt;p&gt;The audio in Nuclear Outrun is quite awesome. The main game doesn&amp;#8217;t have any music, but has a simple, but awesome ambient track. It definitely adds an apocalyptic feel to the game, and I think it fits better than music could have. The loop on the ambient track isn&amp;#8217;t perfect, which could be fixed with some minor tweaking, but it&amp;#8217;s not too noticeable during gameplay with all the sound effects going on in parallel.&lt;/p&gt;
&lt;p&gt;As far as the sound effects go, they&amp;#8217;re just as good. Dying is almost enjoyable, due to the sound of the nuke going off and the awesome scream that follows. All of the sounds appear to be unique to the game, which is always a plus. The sounds for zombies such as dying, upgrading, etc, are all very well done, and really couldn&amp;#8217;t be any better.&lt;/p&gt;
&lt;p&gt;Some of the interface buttons are inconsistent with playing a sound, and it would be a lot more professional if they all did. It&amp;#8217;s a minor fault to not have a simple sound play when pressing a button, but it really does take away from the full experience of a polished game.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/articles/100_nuclearOutrunCritique/nuclear-outrun-05.png" alt="Nuclear Outrun Critique and Review" /&gt;&lt;/div&gt;
&lt;p&gt;All and all, Nuclear Outrun is a very well done physics, zombie, distance, and upgrade game. All of the above themes and genres are extremely popular with sponsors, so it&amp;#8217;s safe to assume that Nerdook didn&amp;#8217;t have a problem selling the game. While there&amp;#8217;s definitely room for improvement, I can&amp;#8217;t name any games that take the above genres and put them together any better, so kudos to Nerdook for that. &lt;/p&gt;
&lt;hr/&gt;
&lt;h2&gt;Your Turn&lt;/h2&gt;
&lt;p&gt;What do you think of Nuclear Outrun? Leave your constructive criticism in the comments.&lt;/p&gt;
&lt;p&gt;And if you’ve got a browser game that you’d like the Activetuts+ community to do a critique on, &lt;a href="http://www.formstack.com/forms/envato-tuts_workshop"&gt;submit it here&lt;/a&gt;. We’re looking forward to seeing what you’ve made.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/z9hTm1dBycMO-TvVjLx7VnmvFE8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/z9hTm1dBycMO-TvVjLx7VnmvFE8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/z9hTm1dBycMO-TvVjLx7VnmvFE8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/z9hTm1dBycMO-TvVjLx7VnmvFE8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=dPO0pft2XSk:xeLLSPLFBX8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=dPO0pft2XSk:xeLLSPLFBX8:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=dPO0pft2XSk:xeLLSPLFBX8:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=dPO0pft2XSk:xeLLSPLFBX8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=dPO0pft2XSk:xeLLSPLFBX8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=dPO0pft2XSk:xeLLSPLFBX8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=dPO0pft2XSk:xeLLSPLFBX8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=dPO0pft2XSk:xeLLSPLFBX8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=dPO0pft2XSk:xeLLSPLFBX8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=dPO0pft2XSk:xeLLSPLFBX8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Flashtuts/~4/dPO0pft2XSk" height="1" width="1"/&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=iJqV0KQmZek:xeLLSPLFBX8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=iJqV0KQmZek:xeLLSPLFBX8:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?i=iJqV0KQmZek:xeLLSPLFBX8:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=iJqV0KQmZek:xeLLSPLFBX8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=iJqV0KQmZek:xeLLSPLFBX8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?i=iJqV0KQmZek:xeLLSPLFBX8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=iJqV0KQmZek:xeLLSPLFBX8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?i=iJqV0KQmZek:xeLLSPLFBX8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/flashtuts-freebies/~4/iJqV0KQmZek" height="1" width="1"/&gt;</description>
		<wfw:commentRss>http://active.tutsplus.com/articles/critique/workshop-nuclear-outrun-critique/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://active.tutsplus.com/articles/critique/workshop-nuclear-outrun-critique/</feedburner:origLink><feedburner:origLink>http://feedproxy.google.com/~r/Flashtuts/~3/dPO0pft2XSk/</feedburner:origLink></item>
		<item>
		<title>Understanding Variables, Arrays, Loops, and Null: The Post-it Note Analogy</title>
		<link>http://feedproxy.google.com/~r/flashtuts-freebies/~3/zQGKRBNXHsg/</link>
		<comments>http://active.tutsplus.com/articles/explanatory/understanding-variables-arrays-loops-and-null-the-repositional-note-analogy/#comments</comments>
		<pubDate>Fri, 11 May 2012 16:30:45 +0000</pubDate>
		<dc:creator>Michael James Williams</dc:creator>
				<category><![CDATA[Explanatory]]></category>
		<category><![CDATA[Basix]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[language agnostic]]></category>
		<category><![CDATA[platform-agnostic]]></category>
		<category><![CDATA[pointer]]></category>
		<category><![CDATA[reference]]></category>
		<category><![CDATA[value]]></category>
		<category><![CDATA[variable]]></category>
		<guid isPermaLink="false">http://active.tutsplus.com/?p=11453</guid>
		<description>&lt;p&gt;What does &lt;code&gt;var&lt;/code&gt; actually do, and why doesn&amp;#8217;t setting &lt;code&gt;myObject = null&lt;/code&gt; actually remove the object? These questions tie in to a fundamental concept in coding, relevant whether your language of choice is AS3, JavaScript, or C#, and can be understood using a few common items from the stationery cupboard.&lt;/p&gt;
&lt;p&gt;&lt;span id="more-11453"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;What&amp;#8217;s a Variable?&lt;/h2&gt;
&lt;p&gt;Let&amp;#8217;s start with the basics. Suppose you want to store the age of your friend Bill:&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: as3; collapse: false; first-line: 1; title: ; notranslate"&gt;
var ageOfBill:Number = 24;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;(I&amp;#8217;m going to use AS3 for these example, but the basic concepts are the same in JavaScript and C#.&lt;/p&gt;
&lt;p&gt;In JavaScript, the syntax is almost the same, but we don&amp;#8217;t specify that age is a number:&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: jscript; collapse: false; first-line: 1; title: ; notranslate"&gt;
var ageOfBill = 24;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;In C# we don&amp;#8217;t use the &lt;code&gt;var&lt;/code&gt; keyword, but we do specify the type of the variable:&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: csharp; collapse: false; first-line: 1; title: ; notranslate"&gt;
short ageOfBill = 24;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;Not different enough to be confusing, I hope.)&lt;/p&gt;
&lt;p&gt;So what&amp;#8217;s happening here? Think of it this way:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;var&lt;/code&gt; (or &lt;code&gt;short&lt;/code&gt;, in C#) means, &amp;#8220;get a fresh Post-it note&amp;#8221;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ageOfBill&lt;/code&gt; means, &amp;#8220;write &lt;code&gt;ageOfBill&lt;/code&gt; across the top, in pen&amp;#8221;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;= 24&lt;/code&gt; means, &amp;#8220;write &lt;code&gt;24&lt;/code&gt; on the note, in pencil&amp;#8221;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/articles/099_repositionalNotes/1.png" alt="Understanding Variables, Arrays, Loops, and Null: The Post-it Note Analogy" /&gt;&lt;/div&gt;
&lt;p&gt;What if later we realise that Bill&amp;#8217;s actually younger than we thought?&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: as3; collapse: false; first-line: 1; highlight: [3]; title: ; notranslate"&gt;
var ageOfBill = 24;
//...later...
ageOfBill = 20;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;This just means we find our &lt;code&gt;ageOfBill&lt;/code&gt; note, erase &lt;code&gt;24&lt;/code&gt;, and write &lt;code&gt;20&lt;/code&gt; on it instead.&lt;/p&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/articles/099_repositionalNotes/2.png" alt="Understanding Variables, Arrays, Loops, and Null: The Post-it Note Analogy" /&gt;&lt;/div&gt;
&lt;p&gt;We &lt;em&gt;could&lt;/em&gt; write &lt;code&gt;var&lt;/code&gt; again:&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: as3; collapse: false; first-line: 1; title: ; notranslate"&gt;
var ageOfBill:Number = 24;
//...later...
var ageOfBill:Number = 20;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;&amp;#8230;but this is not good code, because &lt;code&gt;var&lt;/code&gt; says, &amp;#8220;get a fresh Post-it note&amp;#8221;. If you do this, the compiler will usually figure out what you mean &amp;#8211; i.e. that you want to change what&amp;#8217;s written on the existing &lt;code&gt;ageOfBill&lt;/code&gt; Post-it note rather than actually getting a fresh one &amp;#8211; but it will probably complain.&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: plain; collapse: false; first-line: 1; title: ; notranslate"&gt;
Warning: #3596: Duplicate variable definition.
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;It depends on the language and on your coding environment.&lt;/p&gt;
&lt;p&gt;So can we ask the compiler to get a fresh Post-it note and write a label on it in pen, without writing anything on it in pencil? Perhaps we could do this for Bill&amp;#8217;s friend Marty, whose age we don&amp;#8217;t know:&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: as3; collapse: false; first-line: 1; title: ; notranslate"&gt;
var ageOfMarty:Number;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;Actually (in AS3, at least) this will get a fresh Post-it note, write &lt;code&gt;ageOfMarty&lt;/code&gt; across the top, in pen&amp;#8230; and then write a default initial value of &lt;code&gt;0&lt;/code&gt; on there in pencil:&lt;/p&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/articles/099_repositionalNotes/3.png" alt="Understanding Variables, Arrays, Loops, and Null: The Post-it Note Analogy" /&gt;&lt;/div&gt;
&lt;p&gt;So, in other words, we can&amp;#8217;t have a Post-it note like this without it taking some value.&lt;/p&gt;
&lt;p&gt;Okay &amp;#8211; what about if we want to store the age of Bill&amp;#8217;s best friend Ted, who we know is the same age?&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: as3; collapse: false; first-line: 1; title: ; notranslate"&gt;
var ageOfTed:Number = ageOfBill;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;What happens here is, the computer looks at the &lt;code&gt;ageOfBill&lt;/code&gt; Post-it, then copies the number written on it in pencil to a fresh Post-it, on which it writes &lt;code&gt;ageOfTed&lt;/code&gt; across the top in pen.&lt;/p&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/articles/099_repositionalNotes/4.png" alt="Understanding Variables, Arrays, Loops, and Null: The Post-it Note Analogy" /&gt;&lt;/div&gt;
&lt;p&gt;This is just a copy, though; if we then change the value of &lt;code&gt;ageOfBill&lt;/code&gt; it won&amp;#8217;t affect &lt;code&gt;ageOfTed&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: as3; collapse: false; first-line: 1; title: ; notranslate"&gt;
ageOfBill = 21;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/articles/099_repositionalNotes/5.png" alt="Understanding Variables, Arrays, Loops, and Null: The Post-it Note Analogy" /&gt;&lt;/div&gt;
&lt;p&gt;So! That&amp;#8217;s all pretty straightforward, and maybe even intuitive. Now let&amp;#8217;s talk about the first common pain point: arrays.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;What&amp;#8217;s an Array?&lt;/h2&gt;
&lt;p&gt;Think of an array as a ring binder.&lt;/p&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/articles/099_repositionalNotes/6.png" alt="Understanding Variables, Arrays, Loops, and Null: The Post-it Note Analogy" /&gt;&lt;/div&gt;
&lt;p&gt;(I was going to say a rolodex&amp;#8230;&lt;/p&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/articles/099_repositionalNotes/7.png" alt="Understanding Variables, Arrays, Loops, and Null: The Post-it Note Analogy" /&gt;&lt;/div&gt;
&lt;p&gt;&amp;#8230;but I realised that I had never even seen one in real life.)&lt;/p&gt;
&lt;p&gt;Each sheet inside the binder is like one of those Post-it notes, except without the pen-written label across the top. Instead, we refer to each sheet by the name of the binder and the page number of the sheet.&lt;/p&gt;
&lt;p&gt;Let&amp;#8217;s suppose we&amp;#8217;ve got an array of all our friends, in no particular order. Who&amp;#8217;s on the first page (page #0)?&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: as3; collapse: false; first-line: 1; title: ; notranslate"&gt;
trace(friends[0]);
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;(&lt;code&gt;trace()&lt;/code&gt; just writes the line to the debug output; in JavaScript, you might use &lt;code&gt;console.log()&lt;/code&gt; and in C# you might use &lt;code&gt;Console.WriteLine()&lt;/code&gt; for the same purpose.)&lt;/p&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/articles/099_repositionalNotes/8.png" alt="Understanding Variables, Arrays, Loops, and Null: The Post-it Note Analogy" /&gt;&lt;/div&gt;
&lt;p&gt;It&amp;#8217;s Bill!&lt;/p&gt;
&lt;p&gt;So, now, what does the following line do?&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: as3; collapse: false; first-line: 1; title: ; notranslate"&gt;
var firstFriend:String = friends[0];
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;It gets a fresh Post-it note (because of the &lt;code&gt;var&lt;/code&gt; keyword), writes &lt;code&gt;firstFriend&lt;/code&gt; across the top in pen, then copies whatever&amp;#8217;s written on the first page of the binder onto that note in pencil.&lt;/p&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/articles/099_repositionalNotes/9.png" alt="Understanding Variables, Arrays, Loops, and Null: The Post-it Note Analogy" /&gt;&lt;/div&gt;
&lt;p&gt;(Remember, &lt;code&gt;String&lt;/code&gt; just means a piece of text.)&lt;/p&gt;
&lt;p&gt;We can overwrite what&amp;#8217;s written on any page of the binder, just like with the Post-it notes:&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: as3; collapse: false; first-line: 1; title: ; notranslate"&gt;
friends[0] = &amp;quot;Kyle&amp;quot;;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/articles/099_repositionalNotes/10.png" alt="Understanding Variables, Arrays, Loops, and Null: The Post-it Note Analogy" /&gt;&lt;/div&gt;
&lt;p&gt;&amp;#8230;and of course this doesn&amp;#8217;t affect the &lt;code&gt;firstFriend&lt;/code&gt; Post-it.&lt;/p&gt;
&lt;p&gt;The binder is an apt analogy, because &amp;#8211; just like with an array &amp;#8211; you take take pages out, add new ones, and rearrange them. But remember, individual pages act just like the Post-it notes, except they don&amp;#8217;t have their own pen labels, just page numbers.&lt;/p&gt;
&lt;p&gt;Still pretty straightforward, I hope. So here&amp;#8217;s an interesting question: what happens when you do the following?&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: as3; collapse: false; first-line: 1; title: ; notranslate"&gt;
var listOfNames:Array = friends;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;Uh&amp;#8230;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;You Can&amp;#8217;t Write That on a Post-it&lt;/h2&gt;
&lt;p&gt;I&amp;#8217;ve cheated a bit here, because I talked a bunch about arrays without ever explaining how we create one in the first place. So let&amp;#8217;s tackle that now.&lt;/p&gt;
&lt;p&gt;Suppose you type:&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: as3; collapse: false; first-line: 1; title: ; notranslate"&gt;
var friends:Array = [&amp;quot;Bill&amp;quot;, &amp;quot;Marty&amp;quot;, &amp;quot;Ted&amp;quot;];
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;&amp;#8230;What happens?&lt;/p&gt;
&lt;p&gt;Well, as usual, &lt;code&gt;var friends&lt;/code&gt; means we get a fresh Post-it note and write &lt;code&gt;friends&lt;/code&gt; across the top, in pen:&lt;/p&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/articles/099_repositionalNotes/11.png" alt="Understanding Variables, Arrays, Loops, and Null: The Post-it Note Analogy" /&gt;&lt;/div&gt;
&lt;p&gt;But what do we write on it in pencil? &lt;/p&gt;
&lt;p&gt;It&amp;#8217;s a trick question: we don&amp;#8217;t write &lt;em&gt;anything&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;See, &lt;code&gt;Array&lt;/code&gt; means, &amp;#8220;get a new ring binder&amp;#8221;. And &lt;code&gt;["Bill", "Marty", "Ted"]&lt;/code&gt; means &amp;#8220;put three pages in the binder, with these names on it&amp;#8221;:&lt;/p&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/articles/099_repositionalNotes/12.png" alt="Understanding Variables, Arrays, Loops, and Null: The Post-it Note Analogy" /&gt;&lt;br /&gt;You can&amp;#8217;t see the &amp;#8220;Marty&amp;#8221; and &amp;#8220;Ted&amp;#8221; pages, but they&amp;#8217;re totally there.&lt;/div&gt;
&lt;p&gt;And then? It&amp;#8217;s simple! We stick the &lt;code&gt;friends&lt;/code&gt; Post-it note to the cover of the binder:&lt;/p&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/articles/099_repositionalNotes/13.png" alt="Understanding Variables, Arrays, Loops, and Null: The Post-it Note Analogy" /&gt;&lt;/div&gt;
&lt;p&gt;Now, when we write:&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: as3; collapse: false; first-line: 1; title: ; notranslate"&gt;
trace(friends[0]);
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;&amp;#8230;we know that we have to find the Post-it labelled &lt;code&gt;friends&lt;/code&gt;, then look at whatever&amp;#8217;s written on the first page (page #0) of the binder that it&amp;#8217;s stuck to.&lt;/p&gt;
&lt;p&gt;There are actually very few types of variable where a value gets written onto a Post-it note in pencil. In AS3, the &lt;a href="http://help.adobe.com/en_US/as3/learn/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f9c.html#WS5b3ccc516d4fbf351e63e3d118a9b90204-7f88"&gt;only such types&lt;/a&gt; (called &amp;#8220;primitives&amp;#8221;) are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Number&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;String&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;int&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;uint&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Boolean&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For everything else &amp;#8211; &lt;code&gt;Object&lt;/code&gt;, &lt;code&gt;MovieClip&lt;/code&gt;, &lt;code&gt;XML&lt;/code&gt;, and so on &amp;#8211; we stick the Post-it note onto the item itself.&lt;/p&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/articles/099_repositionalNotes/14.png" alt="Understanding Variables, Arrays, Loops, and Null: The Post-it Note Analogy" /&gt;&lt;/div&gt;
&lt;p&gt;(The details are a little different in JavaScript and C#, but overall the same idea applies.)&lt;/p&gt;
&lt;p&gt;So let&amp;#8217;s get back to our earlier question. When we type:&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: as3; collapse: false; first-line: 1; title: ; notranslate"&gt;
var listOfNames:Array = friends;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;&amp;#8230;what happens?&lt;/p&gt;
&lt;p&gt;Again, we know that &lt;code&gt;var listOfNames&lt;/code&gt; means &amp;#8220;get a fresh Post-it note and write &lt;code&gt;listOfNames&lt;/code&gt; across the top in pen&amp;#8221;. And now we know that &lt;code&gt;Array&lt;/code&gt; means we&amp;#8217;ll be sticking the Post-it note to something (a binder), rather than writing something on the Post-it in pencil.&lt;/p&gt;
&lt;p&gt;Previously, when we&amp;#8217;ve done something similar, we&amp;#8217;ve copied the contents of one Post-it note onto another. So here, should we get a fresh new binder and copy all of the pages from the &lt;code&gt;friends&lt;/code&gt; binder into it?&lt;/p&gt;
&lt;p&gt;Actually, no! All we do is stick this new &lt;code&gt;listOfNames&lt;/code&gt; Post-it note onto the same binder as the &lt;code&gt;friends&lt;/code&gt; Post-it note.&lt;/p&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/articles/099_repositionalNotes/15.png" alt="Understanding Variables, Arrays, Loops, and Null: The Post-it Note Analogy" /&gt;&lt;/div&gt;
&lt;p&gt;Now, &lt;code&gt;friends&lt;/code&gt; and &lt;code&gt;listOfNames&lt;/code&gt; each refer to the &lt;em&gt;exact same array&lt;/em&gt;. So if we write:&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: as3; collapse: false; first-line: 1; title: ; notranslate"&gt;
listOfNames[0] = &amp;quot;Emmett&amp;quot;;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;&amp;#8230;then &lt;code&gt;friends[0]&lt;/code&gt; will &lt;em&gt;also&lt;/em&gt; be &lt;code&gt;Emmett&lt;/code&gt;, because &lt;code&gt;listOfNames[0]&lt;/code&gt; and &lt;code&gt;friends[0]&lt;/code&gt; refer to the exact same page in the exact same binder! And because that page only contains a String (which is a &amp;#8220;primitive&amp;#8221; type, remember), then we&amp;#8217;ve just erased whatever was written on that page previously and written &lt;code&gt;Emmett&lt;/code&gt; there instead.&lt;/p&gt;
&lt;hr/&gt;
&lt;h2&gt;So What Does &lt;code&gt;null&lt;/code&gt; Mean?&lt;/h2&gt;
&lt;p&gt;Seen like this, &lt;code&gt;null&lt;/code&gt; is quite easy to understand. This statement:&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: as3; collapse: false; first-line: 1; title: ; notranslate"&gt;
friends = null;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;&amp;#8230;just means, &amp;#8220;remove the &lt;code&gt;friends&lt;/code&gt; Post-it note from whatever it&amp;#8217;s currently stuck to&amp;#8221;.&lt;/p&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/articles/099_repositionalNotes/16.png" alt="Understanding Variables, Arrays, Loops, and Null: The Post-it Note Analogy" /&gt;&lt;/div&gt;
&lt;p&gt;The &lt;code&gt;friends&lt;/code&gt; Post-it still &lt;em&gt;exists&lt;/em&gt;, it&amp;#8217;s just not stuck to anything. So if you type:&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: as3; collapse: false; first-line: 1; title: ; notranslate"&gt;
trace(friends[0]);
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;or&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: as3; collapse: false; first-line: 1; title: ; notranslate"&gt;
friends[0] = &amp;quot;Henry&amp;quot;;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;&amp;#8230;then you&amp;#8217;ll get an error, because you&amp;#8217;re trying to reference the first page of the binder that the &lt;code&gt;friends&lt;/code&gt; Post-it is stuck to &amp;#8211; but it&amp;#8217;s not stuck to anything!&lt;/p&gt;
&lt;p&gt;So, to be clear, setting &lt;code&gt;friends = null&lt;/code&gt; doesn&amp;#8217;t affect the binder at all. You can still access it just fine via &lt;code&gt;listOfNames&lt;/code&gt;. And you can even type:&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: as3; collapse: false; first-line: 1; title: ; notranslate"&gt;
friends = listOfNames;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;&amp;#8230;to go right back to the old situation:&lt;/p&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/articles/099_repositionalNotes/17.png" alt="Understanding Variables, Arrays, Loops, and Null: The Post-it Note Analogy" /&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h2&gt;Garbage Collection&lt;/h2&gt;
&lt;p&gt;Like I said, setting &lt;code&gt;friends = null&lt;/code&gt; doesn&amp;#8217;t affect the binder directly, but it can have an &lt;em&gt;indirect&lt;/em&gt; effect.&lt;/p&gt;
&lt;p&gt;See, if there are no Post-it notes stuck to the binder at all, then there&amp;#8217;s no way for anyone to access the binder ever again. It&amp;#8217;ll just lie around, totally inaccessible. But having all these binders (and other objects) lying around, totally abandoned, is a real waste of space &amp;#8211; they&amp;#8217;re cluttering up the computer memory.&lt;/p&gt;
&lt;p&gt;That&amp;#8217;s where the &lt;em&gt;garbage collector&lt;/em&gt; comes in. This is a tool that periodically checks for any &amp;#8220;lost&amp;#8221; objects, and throws them in the trash &amp;#8211; and once they&amp;#8217;re gone, they&amp;#8217;re gone for good; if an array is garbage collected then all of its pages are, too.&lt;/p&gt;
&lt;p&gt;For most practical purposes, this doesn&amp;#8217;t affect you at all; objects only get garbage collected if they&amp;#8217;re lost and unable to be found by your code. If you have a lot of these lying around, then you might notice a slight lag every now and then, when the garbage collector does its job (it takes a little time to actively collect the garbage). The benefit is that this clears up more room (memory) for your app.&lt;/p&gt;
&lt;p&gt;(If you want to know more about this topic, read Daniel Sidhion&amp;#8217;s posts on &lt;a href="http://active.tutsplus.com/tutorials/workflow/quick-tip-understanding-garbage-collection-in-as3/"&gt;garbage collection&lt;/a&gt; and &lt;a href="http://active.tutsplus.com/tutorials/actionscript/keep-your-flash-projects-memory-usage-stable-with-object-pooling/"&gt;object pooling&lt;/a&gt;.)&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Arrays of Objects&lt;/h2&gt;
&lt;p&gt;Okay, there&amp;#8217;s one more big concept to grasp &amp;#8211; and it&amp;#8217;s the most complex one yet.&lt;/p&gt;
&lt;p&gt;Consider this snippet:&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: as3; collapse: false; first-line: 1; title: ; notranslate"&gt;
var firstFriendDetails:Array = [&amp;quot;Bill&amp;quot;, 20];
var secondFriendDetails:Array = [&amp;quot;Marty&amp;quot;, 16];
var thirdFriendDetails:Array = [&amp;quot;Ted&amp;quot;, 20];
var allFriends:Array = [firstFriendDetails, secondFriendDetails, thirdFriendDetails];
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;How the heck does &lt;em&gt;that&lt;/em&gt; work?&lt;/p&gt;
&lt;p&gt;Let&amp;#8217;s start with what we know. The first three lines are easy; for each one we:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Get a fresh binder.&lt;/li&gt;
&lt;li&gt;Insert a page with the friend&amp;#8217;s name written on it in pencil.&lt;/li&gt;
&lt;li&gt;For nsert another page with the friend&amp;#8217;s age written on it in pencil.&lt;/li&gt;
&lt;li&gt;Get a fresh Post-it and write the appropriate label across the top in pen.&lt;/li&gt;
&lt;li&gt;Stick the Post-it to the binder.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/articles/099_repositionalNotes/18.png" alt="Understanding Variables, Arrays, Loops, and Null: The Post-it Note Analogy" /&gt;&lt;/div&gt;
&lt;p&gt;As for this line:&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: as3; collapse: false; first-line: 1; title: ; notranslate"&gt;
var allFriends:Array = [firstFriendDetails, secondFriendDetails, thirdFriendDetails];
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;&amp;#8230;we&amp;#8217;re going to need some string and some tape.&lt;/p&gt;
&lt;p&gt;We can think of that one line as being equivalent to this snippet:&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: as3; collapse: false; first-line: 1; title: ; notranslate"&gt;
var allFriends:Array = [];
allFriends[0] = firstFriendDetails;
allFriends[1] = secondFriendDetails;
allFriends[2] = thirdFriendDetails;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;The first line is easy: get a fresh binder and a fresh Post-it note, write &lt;code&gt;allFriends&lt;/code&gt; on the Post-it note, and stick it to the binder.&lt;/p&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/articles/099_repositionalNotes/19.png" alt="Understanding Variables, Arrays, Loops, and Null: The Post-it Note Analogy" /&gt;&lt;/div&gt;
&lt;p&gt;As for the second line:&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: as3; collapse: false; first-line: 1; title: ; notranslate"&gt;
allFriends[0] = firstFriendDetails;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;Remember that I said that each page in a binder is like a Post-it note, except without anything written in pen. If the first page was a Post-it, then we&amp;#8217;d simply stick it to the front of the &lt;code&gt;firstFriendDetails&lt;/code&gt; binder, right?&lt;/p&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/articles/099_repositionalNotes/20.png" alt="Understanding Variables, Arrays, Loops, and Null: The Post-it Note Analogy" /&gt;&lt;/div&gt;
&lt;p&gt;&amp;#8230;but it can&amp;#8217;t be both on the front of that binder &lt;em&gt;and&lt;/em&gt; inside the other binder. So, instead, we use string:&lt;/p&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/articles/099_repositionalNotes/21.png" alt="Understanding Variables, Arrays, Loops, and Null: The Post-it Note Analogy" /&gt;&lt;/div&gt;
&lt;p&gt;Same for the other two:&lt;/p&gt;
&lt;div class="tutorial_image"&gt;&lt;img src="http://d2fhka9tf2vaj2.cloudfront.net/articles/099_repositionalNotes/22.png" alt="Understanding Variables, Arrays, Loops, and Null: The Post-it Note Analogy" /&gt;&lt;/div&gt;
&lt;p&gt;So when we want to know what &lt;code&gt;allFriends[2]&lt;/code&gt; refers to, we just open the &lt;code&gt;allFriends&lt;/code&gt; binder to that page and follow the string &amp;#8211; which, of course, leads to the &lt;code&gt;thirdFriendDetails&lt;/code&gt; binder.&lt;/p&gt;
&lt;p&gt;Similarly, for &lt;code&gt;allFriends[1][0]&lt;/code&gt;, we first figure out which binder &lt;code&gt;allFriends[1]&lt;/code&gt; refers to, and then we look at the first page of &lt;em&gt;that&lt;/em&gt; binder&amp;#8230; so &lt;code&gt;allFriends[1][0]&lt;/code&gt; is &lt;code&gt;Marty&lt;/code&gt;!&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Loops&lt;/h2&gt;
&lt;p&gt;Now put all that information together, and bear it in mind when reading this snippet:&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: as3; collapse: false; first-line: 1; title: ; notranslate"&gt;
var friends:Array = [&amp;quot;Bill&amp;quot;, &amp;quot;Marty&amp;quot;, &amp;quot;Ted&amp;quot;, &amp;quot;Emmett&amp;quot;, &amp;quot;Henry&amp;quot;];
var currentIndex:int = 0;
var currentFriend:String;

while (currentIndex &amp;lt; 5) {
    currentFriend = friends[currentIndex];
    trace(currentFriend);
}
var lastFriend:String = currentFriend;
trace(lastFriend);
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;What if we modify the value of &lt;code&gt;currentFriend&lt;/code&gt; inside the loop?&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: as3; collapse: false; first-line: 1; highlight: [7,8,10]; title: ; notranslate"&gt;
var friends:Array = [&amp;quot;Bill&amp;quot;, &amp;quot;Marty&amp;quot;, &amp;quot;Ted&amp;quot;, &amp;quot;Emmett&amp;quot;, &amp;quot;Henry&amp;quot;];
var currentIndex:int = 0;
var currentFriend:String;

while (currentIndex &amp;lt; 5) {
    currentFriend = friends[currentIndex];
    currentFriend = &amp;quot;Herbert&amp;quot;;
    trace(currentFriend);
}
trace(friends[0]);
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;What if the array contains non-primitive objects (MovieClips, images, arrays, 3D objects, whatever)?&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: as3; collapse: false; first-line: 1; title: ; notranslate"&gt;
var friends:Array = [firstFriend, secondFriend, thirdFriend, fourthFriend, fifthFriend];
var currentIndex:int = 0;
var currentFriend:MovieClip;   //or &amp;quot;:Image&amp;quot; or &amp;quot;:Object&amp;quot; or &amp;quot;:Array&amp;quot; or whatever

while (currentIndex &amp;lt; 5) {
    currentFriend = friends[currentIndex];
    currentFriend = sixthFriend;
}

//What is the value of friends[0] now?
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;Finally, what if the array contains other arrays, which themselves contain primitives?&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: as3; collapse: false; first-line: 1; title: ; notranslate"&gt;
var firstFriendDetails:Array = [&amp;quot;Bill&amp;quot;, 20];
var secondFriendDetails:Array = [&amp;quot;Marty&amp;quot;, 16];
var thirdFriendDetails:Array = [&amp;quot;Ted&amp;quot;, 20];
var fourthFriendDetails:Array = [&amp;quot;Emmett&amp;quot;, 50];
var fifthFriendDetails:Array = [&amp;quot;Henry&amp;quot;, 36];
var friends:Array = [firstFriendDetails, secondFriendDetails, thirdFriendDetails, fourthFriendDetails, fifthFriendDetails];

var currentIndex:int = 0;
var currentFriend:Array;

while (currentIndex &amp;lt; 5) {
    currentFriend = friends[currentIndex];
    currentFriend[0] = &amp;quot;John&amp;quot;;
    currentFriend = [&amp;quot;Herbert&amp;quot;, 29];
}
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;What do you think the value of &lt;code&gt;friends[3][0]&lt;/code&gt; will be after that?&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Other Bits and Pieces&lt;/h2&gt;
&lt;p&gt;Here are a few other important notes you should know:&lt;/p&gt;
&lt;h3&gt;Objects&lt;/h3&gt;
&lt;p&gt;In AS3 and JavaScript, Objects are like Arrays except each page is referred to by a label rather than by its page number. So you can type:&lt;/p&gt;
&lt;pre&gt;
&lt;pre class="brush: as3; collapse: false; first-line: 1; title: ; notranslate"&gt;
var detailsOfBill:Object = {};  //&amp;quot;{}&amp;quot; means &amp;quot;create an Object&amp;quot;
detailsOfBill.title = &amp;quot;Esquire&amp;quot;;
detailsOfBill.bandName = &amp;quot;Wyld Stallyns&amp;quot;;
detailsOfBill.allNames = [&amp;quot;Bill&amp;quot;, &amp;quot;S.&amp;quot;, &amp;quot;Preston&amp;quot;];
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;&amp;#8230;and this is &lt;em&gt;kind of&lt;/em&gt; like getting a fresh binder, sticking a &lt;code&gt;detailsOfBill&lt;/code&gt; Post-it on the front, and filling it with three pages. The first page has the label &lt;code&gt;title&lt;/code&gt; written across the top in pen and the word &lt;code&gt;Esquire&lt;/code&gt; written on it in pencil; the second page has the label &lt;code&gt;bandName&lt;/code&gt; in pen and &lt;code&gt;Wyld Stallyns&lt;/code&gt; in pencil. The third page has the label &lt;code&gt;allNames&lt;/code&gt; but has nothing written on it in pencil; instead, a string attaches it to another, regular binder, whose pages are not labelled: the first page says &lt;code&gt;Bill&lt;/code&gt;, the second says &lt;code&gt;S.&lt;/code&gt;, and the third says &lt;code&gt;Preston&lt;/code&gt;, all in pencil.&lt;/p&gt;
&lt;p&gt;(To make things even more confusing, arrays are technically a special form of Object. And if you think that&amp;#8217;s bad, functions can be seen as a type of Object, too! But that&amp;#8217;s a topic for a future article&amp;#8230;)&lt;/p&gt;
&lt;h3&gt;More on Garbage Collection&lt;/h3&gt;
&lt;p&gt;I said that objects are garbage collected if they don&amp;#8217;t have any Post-it notes stuck to them, but this is an oversimplification. If one page of a binder points to an object via string (i.e. if &lt;code&gt;myArray[0] = myObject&lt;/code&gt; or similar), then that object won&amp;#8217;t be garbage collected. Same goes for if a page of a binder points to another binder (array), or if the page of an object binder points to another object binder&amp;#8230; and so on. It even applies if the only way to access the object is through a Post-it stuck to a binder which has one page that&amp;#8217;s tied to another binder, as many layers deep as you want to go.&lt;/p&gt;
&lt;p&gt;Basically, the garbage collector only collects an item if it can&amp;#8217;t be reached through any other variable.&lt;/p&gt;
&lt;p&gt;This explains why objects that are on the screen usually can&amp;#8217;t be object collected. In AS3, if a MovieClip or other type of DisplayObject is in the display list, then it&amp;#8217;s automatically added to what is essentially a hidden array of display objects (which you can access via &lt;a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/DisplayObjectContainer.html#getChildAt()"&gt;getChildAt()&lt;/a&gt;). Similar structures exist in JavaScript and C#. So if a graphic is on the screen, and you remove all references to it from variables, arrays, and objects, it still won&amp;#8217;t be garbage collected until you remove it from the display list.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Any Questions?&lt;/h2&gt;
&lt;p&gt;I hope this helps to clear things up. It&amp;#8217;s certainly a confusing concept when you first come across it: some variables actually contain a &lt;em&gt;value&lt;/em&gt;, while others just contain a &lt;em&gt;reference&lt;/em&gt; to an object. Don&amp;#8217;t worry if you&amp;#8217;re not 100% sure exactly what&amp;#8217;s going on; it&amp;#8217;ll make a lot more sense after a bit of practice (and a few mistakes!).&lt;/p&gt;
&lt;p&gt;However, if you have any specific questions about it, just stick a comment below and I&amp;#8217;ll do my best to answer.&lt;/p&gt;
&lt;p&gt;Thanks for reading!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/JqwL42Yu1v8yxXp4znDn5KZxWbs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JqwL42Yu1v8yxXp4znDn5KZxWbs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/JqwL42Yu1v8yxXp4znDn5KZxWbs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JqwL42Yu1v8yxXp4znDn5KZxWbs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=jaOXEmsFHi0:DQv_hqcBF6o:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=jaOXEmsFHi0:DQv_hqcBF6o:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=jaOXEmsFHi0:DQv_hqcBF6o:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=jaOXEmsFHi0:DQv_hqcBF6o:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=jaOXEmsFHi0:DQv_hqcBF6o:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=jaOXEmsFHi0:DQv_hqcBF6o:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=jaOXEmsFHi0:DQv_hqcBF6o:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=jaOXEmsFHi0:DQv_hqcBF6o:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=jaOXEmsFHi0:DQv_hqcBF6o:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=jaOXEmsFHi0:DQv_hqcBF6o:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Flashtuts/~4/jaOXEmsFHi0" height="1" width="1"/&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=zQGKRBNXHsg:DQv_hqcBF6o:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=zQGKRBNXHsg:DQv_hqcBF6o:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?i=zQGKRBNXHsg:DQv_hqcBF6o:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=zQGKRBNXHsg:DQv_hqcBF6o:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=zQGKRBNXHsg:DQv_hqcBF6o:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?i=zQGKRBNXHsg:DQv_hqcBF6o:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=zQGKRBNXHsg:DQv_hqcBF6o:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?i=zQGKRBNXHsg:DQv_hqcBF6o:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/flashtuts-freebies/~4/zQGKRBNXHsg" height="1" width="1"/&gt;</description>
		<wfw:commentRss>http://active.tutsplus.com/articles/explanatory/understanding-variables-arrays-loops-and-null-the-repositional-note-analogy/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://active.tutsplus.com/articles/explanatory/understanding-variables-arrays-loops-and-null-the-repositional-note-analogy/</feedburner:origLink><feedburner:origLink>http://feedproxy.google.com/~r/Flashtuts/~3/jaOXEmsFHi0/</feedburner:origLink></item>
		<item>
		<title>Which Tuts+ Site Should We Launch Next?</title>
		<link>http://feedproxy.google.com/~r/flashtuts-freebies/~3/bBMa8CxM4Zc/</link>
		<comments>http://active.tutsplus.com/articles/news/which-tuts-site-should-we-launch-next/#comments</comments>
		<pubDate>Thu, 10 May 2012 05:00:02 +0000</pubDate>
		<dc:creator>David Appleyard</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[launch]]></category>
		<category><![CDATA[poll]]></category>
		<category><![CDATA[tuts]]></category>
		<guid isPermaLink="false">http://active.tutsplus.com/?p=11442</guid>
		<description>&lt;p&gt;We&amp;#8217;re planning our next few Tuts+ sites, and would love your opinion and advice on which topics you think we should cover next! We&amp;#8217;d be really grateful if you could take a minute to answer our quick poll and share your thoughts&amp;#8230;&lt;/p&gt;
&lt;p&gt;&lt;span id="more-11442"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Have Your Say&lt;/h2&gt;
&lt;div style="float:right; margin:0 0 0 20px;"&gt;&lt;script type="text/javascript" charset="utf-8" src="http://static.polldaddy.com/p/6211906.js"&gt;&lt;/script&gt;&lt;br /&gt;
&lt;noscript&gt;&lt;a href="http://polldaddy.com/poll/6211906/"&gt;Activetuts+ Readers: Which Tuts+ Site Should We Launch Next?&lt;/a&gt;&lt;/noscript&gt;&lt;/div&gt;
&lt;p&gt;We&amp;#8217;ve been considering lots of different ideas for our next Tuts+ sites over the past few weeks, and wanted to also ask the opinion of our awesome community!&lt;/p&gt;
&lt;p&gt;A selection of different concepts are included in the poll to the right, along with the option for you to submit your own ideas as well.&lt;/p&gt;
&lt;p&gt;The important thing to note is that these are just ideas. Some of these are close to making our final cut, and others aren&amp;#8217;t&amp;#8230; We&amp;#8217;d love to hear what you think, to help guide our decision.&lt;/p&gt;
&lt;p&gt;Thanks for taking the time to offer your suggestion — I can&amp;#8217;t wait to see what you have to say!&lt;/p&gt;
&lt;h3&gt;Win a 6-Month Tuts+ Premium Membership&lt;/h3&gt;
&lt;p&gt;Our poll will be running for the next couple of weeks, and we&amp;#8217;ll be choosing one respondent at random to receive a six-month Tuts+ Premium membership!&lt;/p&gt;
&lt;p&gt;To be entered into the giveaway, just leave a comment on this post to go into a bit more detail about your site suggestion. We&amp;#8217;ll choose one comment at random to win the Tuts+ Premium membership when the poll ends.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Best of luck!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/M-Ttoas22JNauVvR8DQIvexvY4c/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/M-Ttoas22JNauVvR8DQIvexvY4c/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/M-Ttoas22JNauVvR8DQIvexvY4c/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/M-Ttoas22JNauVvR8DQIvexvY4c/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=70_neLKKldA:YKppUkTmMTM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=70_neLKKldA:YKppUkTmMTM:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=70_neLKKldA:YKppUkTmMTM:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=70_neLKKldA:YKppUkTmMTM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=70_neLKKldA:YKppUkTmMTM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=70_neLKKldA:YKppUkTmMTM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=70_neLKKldA:YKppUkTmMTM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=70_neLKKldA:YKppUkTmMTM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Flashtuts?a=70_neLKKldA:YKppUkTmMTM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Flashtuts?i=70_neLKKldA:YKppUkTmMTM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Flashtuts/~4/70_neLKKldA" height="1" width="1"/&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=bBMa8CxM4Zc:YKppUkTmMTM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=bBMa8CxM4Zc:YKppUkTmMTM:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?i=bBMa8CxM4Zc:YKppUkTmMTM:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=bBMa8CxM4Zc:YKppUkTmMTM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=bBMa8CxM4Zc:YKppUkTmMTM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?i=bBMa8CxM4Zc:YKppUkTmMTM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/flashtuts-freebies?a=bBMa8CxM4Zc:YKppUkTmMTM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/flashtuts-freebies?i=bBMa8CxM4Zc:YKppUkTmMTM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/flashtuts-freebies/~4/bBMa8CxM4Zc" height="1" width="1"/&gt;</description>
		<wfw:commentRss>http://active.tutsplus.com/articles/news/which-tuts-site-should-we-launch-next/feed/</wfw:commentRss>
		<slash:comments>36</slash:comments>
		<feedburner:origLink>http://active.tutsplus.com/articles/news/which-tuts-site-should-we-launch-next/</feedburner:origLink><feedburner:origLink>http://feedproxy.google.com/~r/Flashtuts/~3/70_neLKKldA/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic Page Served (once) in 0.870 seconds -->

