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

<channel>
	<title>ClickPopMedia &#187; ActionScript</title>
	<atom:link href="http://www.clickpopmedia.com/tag/actionscript/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.clickpopmedia.com</link>
	<description>ClickPopMedia is a great little design and illustration firm.</description>
	<lastBuildDate>Thu, 03 Dec 2009 17:28:23 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Physics in ActionScript 3: Box2DFlashAS3</title>
		<link>http://www.clickpopmedia.com/2008/03/17/physics-in-actionscript-3/</link>
		<comments>http://www.clickpopmedia.com/2008/03/17/physics-in-actionscript-3/#comments</comments>
		<pubDate>Mon, 17 Mar 2008 21:57:51 +0000</pubDate>
		<dc:creator>Paul</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Paul]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Box2DFlash]]></category>
		<category><![CDATA[Intermediate]]></category>
		<category><![CDATA[Intro]]></category>
		<category><![CDATA[Physics]]></category>

		<guid isPermaLink="false">http://www.clickpopmedia.com/2008/03/17/physics-in-actionscript-3/</guid>
		<description><![CDATA[I wanted to try something fun with Flash this week, so I did a quick search for &#8220;Flash Physics Engine.&#8221; Lo and behold, I struck gold. Box2DFlashAS3 is an open source ActionScript 3.0 conversion of the C++ Physics Engine Box2D.  I&#8217;m very impressed with its well coded structure and easily implemented nature.  I [...]]]></description>
			<content:encoded><![CDATA[<p>I wanted to try something fun with Flash this week, so I did a quick search for &#8220;Flash Physics Engine.&#8221; Lo and behold, I struck gold. <a href="http://box2dflash.sourceforge.net/">Box2DFlashAS3</a> is an open source ActionScript 3.0 conversion of the C++ Physics Engine <a href="http://www.box2d.org">Box2D</a>.  I&#8217;m very impressed with its well coded structure and easily implemented nature.  I learned a few new things that will change how I code forever just by reading through their example files.<br />
<center><embed src="http://www.clickpopmedia.com/wp-content/uploads/2008/03/phystest.swf" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" play="true" loop="true" menu="true" height="320" width="640"></embed></center><br />
Still, they have limited resources right now as far as help documentation goes (&#8221;Please refer to the source code from the examples provided to get an idea of how to use Box2DFlash in your projects.&#8221; &#8212; that&#8217;s the ReadMe.txt that comes with it&#8230; not very helpful,huh).  I thought I might give you an example of my own and walk through it step by step.<br />
<span id="more-115"></span><br />
That was the thought, but it has taken me all weekend to understand the engine well enough to explain how it works.  The beauty of it though, is you don&#8217;t have to understand how it works to use it.Now to get right into it then! First of all, in order to do anything with Box2DFlash you&#8217;re going to have to include most (if not all) of the files.  If you have the 349KB folder &#8220;Box2D&#8221; in your project folder, then your includes will work just like this:</p>
<div class="dean_ch" style="white-space: wrap;"> <span class="co1">// Classes used in this example</span><br />
&nbsp;<span class="kw3">import</span> Box2D.<span class="me1">Dynamics</span>.<span class="me1">*</span>;<br />
&nbsp;<span class="kw3">import</span> Box2D.<span class="me1">Collision</span>.<span class="me1">*</span>;<br />
&nbsp;<span class="kw3">import</span> Box2D.<span class="me1">Collision</span>.<span class="me1">Shapes</span>.<span class="me1">*</span>;<br />
&nbsp;<span class="kw3">import</span> Box2D.<span class="me1">Dynamics</span>.<span class="me1">Joints</span>.<span class="me1">*</span>;<br />
&nbsp;<span class="kw3">import</span> Box2D.<span class="me1">Dynamics</span>.<span class="me1">Contacts</span>.<span class="me1">*</span>;<br />
&nbsp;<span class="kw3">import</span> Box2D.<span class="me1">Common</span>.<span class="me1">*</span>;<br />
&nbsp;<span class="kw3">import</span> Box2D.<span class="me1">Common</span>.<span class="kw3">Math</span>.<span class="me1">*</span>;</div>
<p>Easy.</p>
<p>Now you have to create a b2World object (source code of the class is in Box2D/Dynamics/b2World.as).  The world object is the entire body of the engine.  Everything is contained within it once your are done.</p>
<p><em>NOTE: The brain of the engine is b2BroadPhase.as and the heart is the Step() function withing the world object.  Don&#8217;t go messing with the brain (b2BroadPhase.as) ever.  You will totally mess up the engine.<br />
</em><br />
The world object constructor requires 3 things:<br />
<strong>1.)</strong> A coordinate system in the form of a b2AABB class object.<br />
<strong>2.)</strong> A vector that defines gravity.  That will be in the form of a b2Vec2 class object.<br />
<strong>3.)</strong> A boolean variable that defines whether objects &#8220;sleep&#8221; or not. (I recommend you make it <strong>true</strong>, that they can sleep)</p>
<div class="dean_ch" style="white-space: wrap;"><span class="co1">// Create world AABB</span><br />
<span class="kw2">var</span> worldAABB:b2AABB = <span class="kw2">new</span> b2AABB<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
worldAABB.<span class="me1">minVertex</span>.<span class="kw3">Set</span><span class="br0">&#40;</span><span class="nu0">-1000.0</span>, <span class="nu0">-1000.0</span><span class="br0">&#41;</span>;<br />
worldAABB.<span class="me1">maxVertex</span>.<span class="kw3">Set</span><span class="br0">&#40;</span><span class="nu0">1000.0</span>, <span class="nu0">1000.0</span><span class="br0">&#41;</span>;</p>
<p><span class="co1">// Define the gravity vector</span><br />
<span class="kw2">var</span> gravity:b2Vec2 = <span class="kw2">new</span> b2Vec2<span class="br0">&#40;</span><span class="nu0">0.0</span>, <span class="nu0">300.0</span><span class="br0">&#41;</span>;</p>
<p><span class="co1">// Allow bodies to sleep</span><br />
<span class="kw2">var</span> doSleep:<span class="kw3">Boolean</span> = <span class="kw2">true</span>;</p>
<p><span class="co1">// Construct a world object</span><br />
m_world = <span class="kw2">new</span> b2World<span class="br0">&#40;</span>worldAABB, gravity, doSleep<span class="br0">&#41;</span>;</div>
<p>My examples are not my own here.  The code I&#8217;m showing is an excerpt from the &#8220;Hello World&#8221; code they provided with the engine.</p>
<p>After creating a world object you have to bring it to life by setting its heart to beating:</p>
<div class="dean_ch" style="white-space: wrap;"><span class="co1">// Add event for main loop</span><br />
addEventListener<span class="br0">&#40;</span>Event.<span class="me1">ENTER_FRAME</span>, Update, <span class="kw2">false</span>, <span class="nu0">0</span>, <span class="kw2">true</span><span class="br0">&#41;</span>;</p>
<p><span class="kw3">public</span> <span class="kw2">function</span> Update<span class="br0">&#40;</span><span class="kw3">e</span>:Event<span class="br0">&#41;</span>:<span class="kw3">void</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; m_world.<span class="me1">Step</span><span class="br0">&#40;</span>m_timeStep, m_iterations<span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></div>
<p>Running the Step() function every frame will update all the Body Definitions you add to your world.<br />
As of right now this world is empty though.  In order to add balls and boxes and any strange polygonal shapes you can think of, we need to create Body Definitions for them.</p>
<p>A Body Definition consists of 2, 3, or 4 things.<br />
<strong> 1.)</strong> A Shape Definition.<br />
<strong> 2.) </strong>An (x,y) position.<br />
<em>optional:</em><br />
<strong> 3.) Rotation (in radians)<br />
4.) </strong>A pre-made Sprite object.</p>
<p>In the example flash movie at the beginning of this post you will notice that all the shapes are simple.  That&#8217;s because everything is being redrawn every frame with only lines and no fill.  That&#8217;s right,  EVERYTHING is made in code.  Nothing was drawn by hand.<br />
If you want your game, or whatever, to have a little more character then that example movie, then you will probably want to associate hand made Sprites with your Body Definitions.</p>
<p>In the &#8220;Hello World&#8221; example, they use Sprites to display their objects.  You could leave them invisible too if you really wanted. Either way they will still be accounted for in the calculations.</p>
<p>On to something very important.  What is a Shape Definition!?  We have 3 types of shape definition and they all extend the base b2ShapeDef class.</p>
<p>First we have the b2BoxDef class.  The b2BoxDef has 4 important properties:<br />
<strong> 1.) </strong>Extents &#8211; this is a vector that essentially goes from one corner of the box to the exact center.  In other words, half the width and hight. (box is a rectangle)<br />
<strong> 2.)</strong> Density &#8211; in the collision equations we use density * area = mass<br />
A density of 0 (zero) or null will make the object static and it will never move in the case of a collision or gravity.<br />
<strong> 3.) </strong>Friction &#8211; this is used to calculate the friction between 2 objects&#8230;  you should keep it between 0.0 and 1.0<br />
<strong> 4.) </strong>Restitution &#8211; this is the bounciness of the object.  Should probably also stay between 0.0 and 1.0</p>
<p>The b2CircleDef has only one differences in it&#8217;s properties.  Instead of Extents it has Radius, which is easy to remember.<br />
The b2PolyDef has an array of (max 8) vertices instead of Extents or Radius.  These vertices are just b2Vec2 vector objects.</p>
<p>Now Adding a bunch of objects to our world should be easy:</p>
<div class="dean_ch" style="white-space: wrap;"><span class="kw2">var</span> bodyDef:b2BodyDef;<br />
<span class="kw2">var</span> boxDef:b2BoxDef;<br />
<span class="kw2">var</span> circleDef:b2CircleDef;</p>
<p><span class="co1">// Add ground body</span><br />
bodyDef = <span class="kw2">new</span> b2BodyDef<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
boxDef = <span class="kw2">new</span> b2BoxDef<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
boxDef.<span class="me1">extents</span>.<span class="kw3">Set</span><span class="br0">&#40;</span><span class="nu0">1000</span>, <span class="nu0">100</span><span class="br0">&#41;</span>;<br />
boxDef.<span class="me1">friction</span> = <span class="nu0">0.3</span>;<br />
<span class="coMULTI">/*Notice that the ground object has no density like the later<br />
definitions. &nbsp;That&#8217;s because it is static and we don&#8217;t want it<br />
effected by any forces.*/</span><br />
bodyDef.<span class="kw3">position</span>.<span class="kw3">Set</span><span class="br0">&#40;</span><span class="nu0">320</span>, <span class="nu0">400</span><span class="br0">&#41;</span>;<br />
bodyDef.<span class="me1">AddShape</span><span class="br0">&#40;</span>boxDef<span class="br0">&#41;</span>;</p>
<p><span class="co1">// Add sprite to body userData</span><br />
<span class="coMULTI">/*We have a Sprite object in the library called PhysGround. &nbsp;Here<br />
we are associating that with our body definition.*/</span><br />
bodyDef.<span class="me1">userData</span> = <span class="kw2">new</span> PhysGround<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
bodyDef.<span class="me1">userData</span>.<span class="kw3">width</span> = boxDef.<span class="me1">extents</span>.<span class="me1">x</span> * <span class="nu0">2</span>;<br />
bodyDef.<span class="me1">userData</span>.<span class="kw3">height</span> = boxDef.<span class="me1">extents</span>.<span class="me1">y</span> * <span class="nu0">2</span>;<br />
addChild<span class="br0">&#40;</span>bodyDef.<span class="me1">userData</span><span class="br0">&#41;</span>;<br />
m_world.<span class="me1">CreateBody</span><span class="br0">&#40;</span>bodyDef<span class="br0">&#41;</span>;</p>
<p><span class="co1">// Add some objects</span><br />
<span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> i:<span class="kw3">int</span> = <span class="nu0">1</span>; i &lt; <span class="nu0">20</span>; i++<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/*We are going to re-use the same bodyDef from before.<br />
&nbsp; &nbsp; &nbsp; &nbsp; It doesn&#8217;t matter now, because it&#8217;s already been copied and stored<br />
&nbsp; &nbsp; &nbsp; &nbsp; in our world object.*/</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; bodyDef = <span class="kw2">new</span> b2BodyDef<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Box</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw3">Math</span>.<span class="kw3">random</span><span class="br0">&#40;</span><span class="br0">&#41;</span> &lt; <span class="nu0">0.5</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; boxDef = <span class="kw2">new</span> b2BoxDef<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; boxDef.<span class="me1">extents</span>.<span class="kw3">Set</span><span class="br0">&#40;</span><span class="kw3">Math</span>.<span class="kw3">random</span><span class="br0">&#40;</span><span class="br0">&#41;</span> * <span class="nu0">15</span> + <span class="nu0">10</span>, <span class="kw3">Math</span>.<span class="kw3">random</span><span class="br0">&#40;</span><span class="br0">&#41;</span> * <span class="nu0">15</span> + <span class="nu0">10</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; boxDef.<span class="me1">density</span> = <span class="nu0">1.0</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; boxDef.<span class="me1">friction</span> = <span class="nu0">0.5</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; boxDef.<span class="me1">restitution</span> = <span class="nu0">0.2</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bodyDef.<span class="me1">AddShape</span><span class="br0">&#40;</span>boxDef<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/*We have a Sprite object in the library called PhysBox.*/</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bodyDef.<span class="me1">userData</span> = <span class="kw2">new</span> PhysBox<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bodyDef.<span class="me1">userData</span>.<span class="kw3">width</span> = boxDef.<span class="me1">extents</span>.<span class="me1">x</span> * <span class="nu0">2</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bodyDef.<span class="me1">userData</span>.<span class="kw3">height</span> = boxDef.<span class="me1">extents</span>.<span class="me1">y</span> * <span class="nu0">2</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Circle</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; circleDef = <span class="kw2">new</span> b2CircleDef<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; circleDef.<span class="me1">radius</span> = <span class="kw3">Math</span>.<span class="kw3">random</span><span class="br0">&#40;</span><span class="br0">&#41;</span> * <span class="nu0">15</span> + <span class="nu0">10</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; circleDef.<span class="me1">density</span> = <span class="nu0">1.0</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; circleDef.<span class="me1">friction</span> = <span class="nu0">0.5</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; circleDef.<span class="me1">restitution</span> = <span class="nu0">0.2</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bodyDef.<span class="me1">AddShape</span><span class="br0">&#40;</span>circleDef<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/*We have a Sprite object in the library called PhysCircle.*/</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bodyDef.<span class="me1">userData</span> = <span class="kw2">new</span> PhysCircle<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bodyDef.<span class="me1">userData</span>.<span class="kw3">width</span> = circleDef.<span class="me1">radius</span> * <span class="nu0">2</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bodyDef.<span class="me1">userData</span>.<span class="kw3">height</span> = circleDef.<span class="me1">radius</span> * <span class="nu0">2</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; bodyDef.<span class="kw3">position</span>.<span class="me1">x</span> = <span class="kw3">Math</span>.<span class="kw3">random</span><span class="br0">&#40;</span><span class="br0">&#41;</span> * <span class="nu0">400</span> + <span class="nu0">120</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; bodyDef.<span class="kw3">position</span>.<span class="me1">y</span> = <span class="kw3">Math</span>.<span class="kw3">random</span><span class="br0">&#40;</span><span class="br0">&#41;</span> * <span class="nu0">100</span> + <span class="nu0">50</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; m_world.<span class="me1">CreateBody</span><span class="br0">&#40;</span>bodyDef<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; addChild<span class="br0">&#40;</span>bodyDef.<span class="me1">userData</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></div>
<p>That&#8217;s great isn&#8217;t it?  It&#8217;s really not that hard to add a whole bunch of objects to your world. You should know that the Step() function that we added earlier will only take care of moving and rotating our body definitions.  If we have sprites to represent those definitions then we need to update them manually&#8230;  they made the code for that easy and you can copy and paste it almost exactly into every one of your projects.<br />
We just have to rewrite our Update function from before:</p>
<div class="dean_ch" style="white-space: wrap;"><span class="kw3">public</span> <span class="kw2">function</span> Update<span class="br0">&#40;</span><span class="kw3">e</span>:Event<span class="br0">&#41;</span>:<span class="kw3">void</span><span class="br0">&#123;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; m_world.<span class="me1">Step</span><span class="br0">&#40;</span>m_timeStep, m_iterations<span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Go through body list and update sprite positions/rotations</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> bb:b2Body = m_world.<span class="me1">m_bodyList</span>; bb; bb = bb.<span class="me1">m_next</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>bb.<span class="me1">m_userData</span> is Sprite<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bb.<span class="me1">m_userData</span>.<span class="me1">x</span> = bb.<span class="me1">m_position</span>.<span class="me1">x</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bb.<span class="me1">m_userData</span>.<span class="me1">y</span> = bb.<span class="me1">m_position</span>.<span class="me1">y</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bb.<span class="me1">m_userData</span>.<span class="me1">rotation</span> = bb.<span class="me1">m_rotation</span> * <span class="br0">&#40;</span><span class="nu0">180</span>/<span class="kw3">Math</span>.<span class="kw3">PI</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="coMULTI">/*This is an extreemly clever way to do this, and I suggest you copy it exactly in your own projects.*/</span></p>
<p><span class="br0">&#125;</span></div>
<p>That&#8217;s it for now.  We have objects in a world that can collide with each other and are affected by gravity.  There is still a lot more to talk about, but I am just walking you through the &#8220;Hello World&#8221; first.  We still need to cover Joints, Pulleys, Gears, Compound Shapes, Forced rotation (like cars tires), and a lot more&#8230;  I doubt I will be able to cover all these topics anytime soon, but I will definitely write more tutorials on this physics engine in the future.</p>
<p>You can download my copy of the &#8220;Hello World&#8221; example project with all of my comments included (there is almost no commenting in the original).</p>
<p><strong>Download</strong> <a href="http://www.clickpopmedia.com/wp-content/uploads/2008/03/hello-world.zip" title="Hello World with comments">Hello World w/ comments</a>.</p>
<p>You can get all of the library files needed for <a href="http://box2dflash.sourceforge.net/">Box2DFlash</a> at their site.  It&#8217;s free.</p>
<p>Credits:<br />
Box2D &#8211; Erin Catto ( <a href="http://gphysics.com/">http://gphysics.com/</a> )<br />
Box2DFlashAS3 &#8211; Matthew Bush (Flash ActionScript 3.0 port of Erin Catto&#8217;s work)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.clickpopmedia.com/2008/03/17/physics-in-actionscript-3/feed/</wfw:commentRss>
		<slash:comments>32</slash:comments>
		</item>
		<item>
		<title>Intro to ActionScript 3.0 Tweening</title>
		<link>http://www.clickpopmedia.com/2008/03/10/tween-intro/</link>
		<comments>http://www.clickpopmedia.com/2008/03/10/tween-intro/#comments</comments>
		<pubDate>Tue, 11 Mar 2008 01:12:49 +0000</pubDate>
		<dc:creator>Paul</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Paul]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Beginner]]></category>
		<category><![CDATA[Tween]]></category>

		<guid isPermaLink="false">http://www.clickpopmedia.com/2008/03/10/an-introduction-to-tween-animation-in-actionscript-30/</guid>
		<description><![CDATA[I am going to talk about how to animate using Tween objects in ActionScript.  Tween objects are enormously useful.  They can change any numeric property of any object over time.
For example one of the most common uses of Tween objects in ActionScript is to fade an image out as another fades in.  [...]]]></description>
			<content:encoded><![CDATA[<p>I am going to talk about how to animate using Tween objects in ActionScript.  Tween objects are enormously useful.  They can change any numeric property of any object over time.</p>
<p>For example one of the most common uses of Tween objects in ActionScript is to fade an image out as another fades in.  The advantage of using a Tween object to do this instead of any of your other options is</p>
<ul>
<li>1.) it is easy to understand</li>
<li>2.) it is the easiest to code</li>
<li>3.) it generally looks the best.</li>
</ul>
<p>It&#8217;s fairly easy to write a bit of code that will change the X position of a movieClip by 2 every frame, but that will be very linear and boring.  Also when does it stop? and how?  You would have to create a lot of <strong>if()</strong> statements that just take forever to think through and would make your code harder to read. <strong>(<em>VQ:</em> </strong><em>lots of nested if statements are usually a thing to avoid</em><strong>)</strong></p>
<p>With a Tween object you can use Easing methods.  In the example that follows I used the Easing method <strong>Regular.easeInOut</strong> to start the motion with a little acceleration and then bring it to a stop in the same way.<br />
<center><embed src="http://www.clickpopmedia.com/wp-content/uploads/2008/03/oscillator.swf" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" play="true" loop="true" menu="true" height="40" width="600"></embed></center></p>
<p align="center"><em>If the motion of the dot gets annoying you can stop or start it again at any time by clicking on the Flash movie.</em><span id="more-97"></span></p>
<p>Notice how the motion is almost natural at the ends.  It doesn&#8217;t just stop and turn around. The code used to create this motion is simple and short:</p>
<div class="dean_ch" style="white-space: wrap;">package classes <span class="br0">&#123;</span><br />
<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="kw3">MovieClip</span>;<br />
<span class="kw3">import</span> fl.<span class="me1">transitions</span>.<span class="me1">Tween</span>;<br />
<span class="kw3">import</span> fl.<span class="me1">transitions</span>.<span class="me1">TweenEvent</span>;<br />
<span class="kw3">import</span> fl.<span class="me1">transitions</span>.<span class="me1">easing</span>.<span class="me1">*</span>; <span class="co1">//I like to import them all so it&#8217;s easy to play with later.</span></p>
<p><span class="kw3">public</span> <span class="kw2">class</span> Oscillator <span class="kw3">extends</span> <span class="kw3">MovieClip</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/*These constants allow me to change the tween without<br />
&nbsp; &nbsp; &nbsp; &nbsp; digging through my code to find it. &nbsp;It&#8217;s just good practice*/</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> const ANCHOR1:<span class="kw3">Number</span> = <span class="nu0">5</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> const ANCHOR2:<span class="kw3">Number</span> = <span class="nu0">565</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> const <span class="kw3">TIME</span>:<span class="kw3">Number</span> = <span class="nu0">1.5</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> myTweenX:Tween; &nbsp;<span class="co1">//ALWAYS declare tweens as globals or properties</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> Oscillator<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; myTweenX = <span class="kw2">new</span> Tween<span class="br0">&#40;</span><span class="kw3">this</span>, <span class="st0">&quot;x&quot;</span>, Regular.<span class="me1">easeInOut</span>, ANCHOR1, ANCHOR2, <span class="kw3">TIME</span>, <span class="kw2">true</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; myTweenX.<span class="kw3">start</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; myTweenX.<span class="me1">addEventListener</span><span class="br0">&#40;</span>TweenEvent.<span class="me1">MOTION_FINISH</span>, yoyoTween<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Yoyo simply runs the Tween in reverse. &nbsp;And then reverse of the reverse (forward).</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">function</span> yoyoTween<span class="br0">&#40;</span>event:TweenEvent<span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; event.<span class="me1">currentTarget</span>.<span class="me1">yoyo</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></div>
<p>I would recommend downloading the source code for this movie at the bottom of the post and playing with some of the other <strong>Easing</strong> methods such as, <strong>Elastic, Strong, Bounce, Back, </strong>and<strong> None</strong>.</p>
<p>Alright!  Before you go off and try to use <strong>Tweens</strong> all over the place I need to tell you about the <strong>most common mistake</strong> people make when using <strong>Tween </strong>objects.  <em>You must ALWAYS declare you Tween variables as globals (outside of any function) or properties (outside of any method)</em>.</p>
<p>If ever I see someone complaining about their Tween being buggy and cutting out halfway through the animation (and I see that complaint a LOT) it&#8217;s because they declared and ran their Tween from within a function or method.  What happens (and this doesn&#8217;t ALWAYS happen, but it will eventually) is that the function finishes running before the Tween does.  Then the Flash Run-Time Environment cleans up the memory (called <strong>garbage collecting</strong>) and your tween gets <a href="http://www.homestarrunner.com/sbemail20.html" title="DELETED!"><strong>deleted!</strong></a> before it finishes.  This might not happen while you are testing it yourself, but it will happen eventually while someone else is using it.</p>
<p>If you have Adobe Flash CS3 then you should type the word &#8220;Tween&#8221; in the &#8216;action&#8217; panel then right click it and pick the bottom option on the drop down menu &#8216;View Help&#8217;.  That will show you the EXCELLENT help files on tweens that come along with Flash.  I&#8217;m just trying to introduce you to an incredibly useful tool&#8230;  there really isn&#8217;t too much to teach about how to use it.  You just need to play and experiment with it yourself.</p>
<p>You can also download my code for the Flash movie example earlier here: <a href="http://www.clickpopmedia.com/wp-content/uploads/2008/03/oscillator.zip" title="Oscillator Source">Oscillator Source</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.clickpopmedia.com/2008/03/10/tween-intro/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Putting &#8217;static&#8217; to good use.</title>
		<link>http://www.clickpopmedia.com/2008/03/03/putting-static-to-good-use/</link>
		<comments>http://www.clickpopmedia.com/2008/03/03/putting-static-to-good-use/#comments</comments>
		<pubDate>Mon, 03 Mar 2008 23:00:34 +0000</pubDate>
		<dc:creator>Paul</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Just for Fun!]]></category>
		<category><![CDATA[Paul]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Beginner]]></category>
		<category><![CDATA[Calculator]]></category>
		<category><![CDATA[Intermediate]]></category>
		<category><![CDATA[Static]]></category>

		<guid isPermaLink="false">http://www.clickpopmedia.com/2008/03/03/putting-static-to-good-use/</guid>
		<description><![CDATA[&#160;
I&#8217;m going to talk about how to build a simple 4 function calculator using static variables and meathods in Flash ActionScript 3.0.  This is my first tutorial, so if you have questions or comments, I would appreciate them and will do what I can.


First of all we want to think through how this is [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center">&nbsp;</p>
<p>I&#8217;m going to talk about how to build a simple 4 function calculator using static variables and meathods in Flash ActionScript 3.0.  This is my first tutorial, so if you have questions or comments, I would appreciate them and will do what I can.<br />
<center><embed src="http://www.clickpopmedia.com/wp-content/uploads/2008/02/calculator.swf" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" play="true" loop="true" menu="true" height="220" width="210"></embed></center><br />
<span id="more-51"></span><br />
First of all we want to think through how this is going to work.  I wanted two types of buttons;  The digit buttons (1, 2, 3&#8230;) and the operator buttons (+, -, =&#8230;) and so I created 2 simple MovieClips that are almost the same as my base and then assigned them custom classes which I planned to make later.<br />
<a href="http://www.clickpopmedia.com/wp-content/uploads/2008/03/screen2.png" title="Library and Properties"><img src="http://www.clickpopmedia.com/wp-content/uploads/2008/03/screen2.png" alt="Library and Properties" /></a>The buttons are just a simple gray box with rounded corners (which doesn&#8217;t matter&#8230;  make it whatever you want) and a small textField with instance name &#8220;btnKey&#8221; (which does matter, at least for <em>my</em> code).<br />
<a href="http://www.clickpopmedia.com/wp-content/uploads/2008/03/screen.png" title="button makeup."><img src="http://www.clickpopmedia.com/wp-content/uploads/2008/03/screen.png" alt="button makeup." /></a><strong>None of that goes on the stage.</strong>   I want to add everything to the stage with code so that it&#8217;s a simple matter of giving them instance names and passing them their initial values.Just to give ourselves something to work with I filled in the basics of our button classes</p>
<div class="dean_ch" style="white-space: wrap;">package classes <span class="br0">&#123;</span><br />
<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="kw3">MovieClip</span>;<br />
<span class="kw3">import</span> flash.<span class="me1">events</span>.<span class="me1">MouseEvent</span>;<br />
<span class="kw3">import</span> flash.<span class="kw3">text</span>.<span class="kw3">TextField</span>;</p>
<p><span class="kw3">public</span> <span class="kw2">class</span> BaseDigitBtn <span class="kw3">extends</span> <span class="kw3">MovieClip</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> num:<span class="kw3">Number</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> BaseDigitBtn<span class="br0">&#40;</span>numP:<span class="kw3">Number</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">this</span>.<span class="me1">num</span> = numP;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; btnKey.<span class="kw3">text</span> = <span class="kw3">String</span><span class="br0">&#40;</span>numP<span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mouseChildren = <span class="kw2">false</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; buttonMode = <span class="kw2">true</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">stop</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; addEventListener<span class="br0">&#40;</span>MouseEvent.<span class="me1">MOUSE_UP</span>, <span class="kw3">OnRelease</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">function</span> <span class="kw3">OnRelease</span><span class="br0">&#40;</span>event:MouseEvent<span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/****I will decide what happens here later****/</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></div>
<p>I pretty much use the same code for both <strong>BaseDigitBtn</strong> and <strong>BaseFuncBtn</strong>, only one receives a string var while the other receives a number.</p>
<div class="dean_ch" style="white-space: wrap;">&#8230;</p>
<p><span class="kw3">public</span> <span class="kw2">function</span> BaseFuncBtn<span class="br0">&#40;</span>disp:<span class="kw3">String</span>, strP:<span class="kw3">String</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">this</span>.<span class="me1">str</span> = strP;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;btnKey.<span class="kw3">text</span> = disp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; mouseChildren = <span class="kw2">false</span>;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;buttonMode = <span class="kw2">true</span>;</p>
<p><span class="kw3">stop</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;addEventListener<span class="br0">&#40;</span>MouseEvent.<span class="me1">MOUSE_UP</span>, <span class="kw3">OnRelease</span><span class="br0">&#41;</span>;</p>
<p>&nbsp;<span class="br0">&#125;</span></p>
<p>&#8230;</p></div>
<p>Now if we want we can write the code to put these buttons on the stage.  It&#8217;s only a few lines of code really that are copied and pasted till I&#8217;m blue in the face then with little added changes in each:</p>
<div class="dean_ch" style="white-space: wrap;"><span class="coMULTI">/**Importing my 3 custom classes**/</span></p>
<p><span class="kw3">import</span> classes.<span class="me1">BaseDigitBtn</span>;</p>
<p><span class="kw3">import</span> classes.<span class="me1">BaseFuncBtn</span>;</p>
<p><span class="kw3">import</span> classes.<span class="me1">Calc</span>; &nbsp;<span class="co1">//I will talk about this class in a second&#8230; &nbsp;just hold on.Calc.clearField(); &nbsp;//I needed to initalize some variables</span></p>
<p><span class="coMULTI">/*************Creating all my button instances*********************/</span></p>
<p><span class="kw2">var</span> Btn1:BaseDigitBtn = <span class="kw2">new</span> BaseDigitBtn<span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span>;</p>
<p><span class="kw2">var</span> Btn2:BaseDigitBtn = <span class="kw2">new</span> BaseDigitBtn<span class="br0">&#40;</span><span class="nu0">2</span><span class="br0">&#41;</span>;</p>
<p><span class="kw2">var</span> Btn3:BaseDigitBtn = <span class="kw2">new</span> BaseDigitBtn<span class="br0">&#40;</span><span class="nu0">3</span><span class="br0">&#41;</span>;</p>
<p><span class="kw2">var</span> Btn4:BaseDigitBtn = <span class="kw2">new</span> BaseDigitBtn<span class="br0">&#40;</span><span class="nu0">4</span><span class="br0">&#41;</span>;</p>
<p><span class="kw2">var</span> Btn5:BaseDigitBtn = <span class="kw2">new</span> BaseDigitBtn<span class="br0">&#40;</span><span class="nu0">5</span><span class="br0">&#41;</span>;</p>
<p><span class="kw2">var</span> Btn6:BaseDigitBtn = <span class="kw2">new</span> BaseDigitBtn<span class="br0">&#40;</span><span class="nu0">6</span><span class="br0">&#41;</span>;</p>
<p><span class="kw2">var</span> Btn7:BaseDigitBtn = <span class="kw2">new</span> BaseDigitBtn<span class="br0">&#40;</span><span class="nu0">7</span><span class="br0">&#41;</span>;</p>
<p><span class="kw2">var</span> Btn8:BaseDigitBtn = <span class="kw2">new</span> BaseDigitBtn<span class="br0">&#40;</span><span class="nu0">8</span><span class="br0">&#41;</span>;</p>
<p><span class="kw2">var</span> Btn9:BaseDigitBtn = <span class="kw2">new</span> BaseDigitBtn<span class="br0">&#40;</span><span class="nu0">9</span><span class="br0">&#41;</span>;</p>
<p><span class="kw2">var</span> Btn0:BaseDigitBtn = <span class="kw2">new</span> BaseDigitBtn<span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span>;</p>
<p><span class="co1">//The first peram in the following declerations is what is displayed on the</span></p>
<p><span class="co1">//button. &nbsp;The second peram is the name of the opperator.</span></p>
<p><span class="kw2">var</span> BtnA:BaseFuncBtn = <span class="kw2">new</span> BaseFuncBtn<span class="br0">&#40;</span><span class="st0">&quot;+&quot;</span>, Calc.<span class="kw3">ADD</span><span class="br0">&#41;</span>;</p>
<p><span class="kw2">var</span> BtnS:BaseFuncBtn = <span class="kw2">new</span> BaseFuncBtn<span class="br0">&#40;</span><span class="st0">&quot;-&quot;</span>, Calc.<span class="me1">SUBTRACT</span><span class="br0">&#41;</span>;</p>
<p><span class="kw2">var</span> BtnM:BaseFuncBtn = <span class="kw2">new</span> BaseFuncBtn<span class="br0">&#40;</span><span class="st0">&quot;X&quot;</span>, Calc.<span class="me1">MULTIPLY</span><span class="br0">&#41;</span>;</p>
<p><span class="kw2">var</span> BtnD:BaseFuncBtn = <span class="kw2">new</span> BaseFuncBtn<span class="br0">&#40;</span><span class="st0">&quot;/&quot;</span>, Calc.<span class="me1">DIVIDE</span><span class="br0">&#41;</span>;</p>
<p><span class="kw2">var</span> BtnE:BaseFuncBtn = <span class="kw2">new</span> BaseFuncBtn<span class="br0">&#40;</span><span class="st0">&quot;=&quot;</span>, Calc.<span class="me1">EQUALS</span><span class="br0">&#41;</span>;</p>
<p><span class="kw2">var</span> BtnC:BaseFuncBtn = <span class="kw2">new</span> BaseFuncBtn<span class="br0">&#40;</span><span class="st0">&quot;C&quot;</span>, Calc.<span class="kw3">CLEAR</span><span class="br0">&#41;</span>;</p>
<p><span class="kw2">var</span> BtnPN:BaseFuncBtn = <span class="kw2">new</span> BaseFuncBtn<span class="br0">&#40;</span><span class="st0">&quot;+/-&quot;</span>, Calc.<span class="me1">POS_NEG</span><span class="br0">&#41;</span>;</p>
<p><span class="kw2">var</span> BtnDec:BaseFuncBtn = <span class="kw2">new</span> BaseFuncBtn<span class="br0">&#40;</span><span class="st0">&quot;.&quot;</span>, Calc.<span class="me1">DECIMAL</span><span class="br0">&#41;</span>;</p>
<p><span class="coMULTI">/*****************Placing those buttons on the stage******************/</span></p>
<p><span class="kw1">for</span><span class="br0">&#40;</span><span class="kw2">var</span> i = <span class="nu0">1</span>; i &lt; <span class="nu0">10</span>; i++<span class="br0">&#41;</span> <span class="br0">&#123;</span></p>
<p>&nbsp;addChild<span class="br0">&#40;</span><span class="kw3">this</span><span class="br0">&#91;</span><span class="st0">&quot;Btn&quot;</span> + i<span class="br0">&#93;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp;<span class="kw3">this</span><span class="br0">&#91;</span><span class="st0">&quot;Btn&quot;</span>+i<span class="br0">&#93;</span>.<span class="me1">x</span> = <span class="nu0">10</span> + <span class="br0">&#40;</span><span class="br0">&#40;</span>i<span class="nu0">-1</span><span class="br0">&#41;</span>%<span class="nu0">3</span><span class="br0">&#41;</span>*<span class="nu0">50</span>;</p>
<p>&nbsp;<span class="kw3">this</span><span class="br0">&#91;</span><span class="st0">&quot;Btn&quot;</span>+i<span class="br0">&#93;</span>.<span class="me1">y</span> = <span class="nu0">10</span> + <span class="br0">&#40;</span><span class="kw3">int</span><span class="br0">&#40;</span><span class="br0">&#40;</span>i<span class="nu0">-1</span><span class="br0">&#41;</span>/<span class="nu0">3</span><span class="br0">&#41;</span><span class="br0">&#41;</span>*<span class="nu0">34</span>;</p>
<p><span class="br0">&#125;</span></p>
<p>addChild<span class="br0">&#40;</span>BtnA<span class="br0">&#41;</span>;</p>
<p>BtnA.<span class="me1">x</span> = <span class="nu0">160</span>;</p>
<p>BtnA.<span class="me1">y</span> = <span class="nu0">10</span>;</p>
<p>addChild<span class="br0">&#40;</span>BtnS<span class="br0">&#41;</span>;</p>
<p>BtnS.<span class="me1">x</span> = <span class="nu0">160</span>;</p>
<p>BtnS.<span class="me1">y</span> = <span class="nu0">44</span>;</p>
<p>addChild<span class="br0">&#40;</span>BtnM<span class="br0">&#41;</span>;</p>
<p>BtnM.<span class="me1">x</span> = <span class="nu0">160</span>;</p>
<p>BtnM.<span class="me1">y</span> = <span class="nu0">78</span>;</p>
<p>addChild<span class="br0">&#40;</span>BtnD<span class="br0">&#41;</span>;</p>
<p>BtnD.<span class="me1">x</span> = <span class="nu0">160</span>;</p>
<p>BtnD.<span class="me1">y</span> = <span class="nu0">112</span>;</p>
<p>addChild<span class="br0">&#40;</span>BtnE<span class="br0">&#41;</span>;</p>
<p>BtnE.<span class="me1">x</span> = <span class="nu0">110</span>;</p>
<p>BtnE.<span class="me1">y</span> = <span class="nu0">112</span>;</p>
<p>addChild<span class="br0">&#40;</span>Btn0<span class="br0">&#41;</span>;</p>
<p>Btn0.<span class="me1">x</span> = <span class="nu0">60</span>;</p>
<p>Btn0.<span class="me1">y</span> = <span class="nu0">112</span>;</p>
<p>addChild<span class="br0">&#40;</span>BtnC<span class="br0">&#41;</span>;</p>
<p>BtnC.<span class="me1">x</span> = <span class="nu0">10</span>;</p>
<p>BtnC.<span class="me1">y</span> = <span class="nu0">112</span>;</p>
<p>addChild<span class="br0">&#40;</span>BtnPN<span class="br0">&#41;</span>;</p>
<p>BtnPN.<span class="me1">x</span> = <span class="nu0">110</span>;</p>
<p>BtnPN.<span class="me1">y</span> = <span class="nu0">146</span>;</p>
<p>addChild<span class="br0">&#40;</span>BtnDec<span class="br0">&#41;</span>;</p>
<p>BtnDec.<span class="me1">x</span> = <span class="nu0">60</span>;</p>
<p>BtnDec.<span class="me1">y</span> = <span class="nu0">146</span>;</p>
<p><span class="coMULTI">/**********A cheap (not the best, but good enough for us) easy way to keep the display refreshing******/</span></p>
<p>addEventListener<span class="br0">&#40;</span>Event.<span class="me1">ENTER_FRAME</span>, <span class="kw3">OnEnterFrame</span><span class="br0">&#41;</span>;</p>
<p><span class="kw2">function</span> <span class="kw3">OnEnterFrame</span><span class="br0">&#40;</span>event:Event<span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span></p>
<p>&nbsp;digitDisplay.<span class="kw3">text</span> = Calc.<span class="me1">getDispNum</span><span class="br0">&#40;</span><span class="br0">&#41;</span>; &nbsp;<span class="co1">//returns a string</span></p>
<p><span class="br0">&#125;</span></div>
<p>So, now that we&#8217;ve made all the basic buttons, it&#8217;s time to get into the heart of this calculator.   Everything happens in one class I called <strong>Calc.</strong><br />
First of all I want to explain that I usually like to make public static constants for a lot of my strings that I want to use as a parameter because it makes it easier to debug if you make a typo.  You saw them being used when I created the instances of my operator buttons and here they are being declared in my <strong>Calc</strong> class:</p>
<div class="dean_ch" style="white-space: wrap;">package classes <span class="br0">&#123;</span></p>
<p><span class="kw3">public</span> <span class="kw2">class</span> Calc <span class="br0">&#123;</span></p>
<p>&nbsp;<span class="coMULTI">/*****Useing these makes debuging easier and is good practice****/</span></p>
<p>&nbsp;<span class="kw3">public</span> <span class="kw3">static</span> const <span class="kw3">ADD</span>:<span class="kw3">String</span> = <span class="st0">&quot;add&quot;</span>;</p>
<p>&nbsp;<span class="kw3">public</span> <span class="kw3">static</span> const SUBTRACT:<span class="kw3">String</span> = <span class="st0">&quot;subtract&quot;</span>;</p>
<p>&nbsp;<span class="kw3">public</span> <span class="kw3">static</span> const MULTIPLY:<span class="kw3">String</span> = <span class="st0">&quot;multiply&quot;</span>;</p>
<p>&nbsp;<span class="kw3">public</span> <span class="kw3">static</span> const DIVIDE:<span class="kw3">String</span> = <span class="st0">&quot;divide&quot;</span>;</p>
<p>&nbsp;<span class="kw3">public</span> <span class="kw3">static</span> const EQUALS:<span class="kw3">String</span> = <span class="st0">&quot;equals&quot;</span>;</p>
<p>&nbsp;<span class="kw3">public</span> <span class="kw3">static</span> const <span class="kw3">CLEAR</span>:<span class="kw3">String</span> = <span class="st0">&quot;clear&quot;</span>;</p>
<p>&nbsp;<span class="kw3">public</span> <span class="kw3">static</span> const DECIMAL:<span class="kw3">String</span> = <span class="st0">&quot;decimal&quot;</span>;</p>
<p>&nbsp;<span class="kw3">public</span> <span class="kw3">static</span> const POS_NEG:<span class="kw3">String</span> = <span class="st0">&quot;positive/negative&quot;</span>;</p>
<p>&nbsp;<span class="kw3">public</span> <span class="kw3">static</span> const <span class="kw3">SQRT</span>:<span class="kw3">String</span> = <span class="st0">&quot;sqrt&quot;</span>;</p>
<p>&nbsp;<span class="kw3">public</span> <span class="kw3">static</span> const SQUARE:<span class="kw3">String</span> = <span class="st0">&quot;square&quot;</span>;</p>
<p>&nbsp;<span class="kw3">public</span> <span class="kw3">static</span> const POWER:<span class="kw3">String</span> = <span class="st0">&quot;power&quot;</span>;</p>
<p>&nbsp;<span class="kw3">public</span> <span class="kw3">static</span> const BACK:<span class="kw3">String</span> = <span class="st0">&quot;back&quot;</span>;&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> <span class="kw2">var</span> <span class="kw3">isActive</span>:<span class="kw3">Boolean</span>; &nbsp;<span class="co1">//Used to tell me what to display, the total or the number being entered.</span></p>
<p>&nbsp;<span class="kw3">public</span> <span class="kw3">static</span> <span class="kw2">var</span> activeNum:<span class="kw3">Number</span>; &nbsp;<span class="co1">//The number being entered.</span></p>
<p>&nbsp;<span class="kw3">public</span> <span class="kw3">static</span> <span class="kw2">var</span> decVal:<span class="kw3">Number</span>;&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Used to place the next decimal at the Nth place.</span></p>
<p><span class="kw3">private</span> <span class="kw3">static</span> <span class="kw2">var</span> total:<span class="kw3">Number</span>;</p>
<p>&nbsp;<span class="kw3">private</span> <span class="kw3">static</span> <span class="kw2">var</span> activeFunc:<span class="kw2">Function</span>; <span class="co1">//Points to the opporator function currently active.</span></p>
<p><span class="kw3">public</span> <span class="kw2">function</span> Calc<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> &nbsp;<span class="co1">//This constructor isn&#8217;t really used.</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;clearField<span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp;<span class="br0">&#125;</span></p>
<p><span class="kw3">public</span> <span class="kw3">static</span> <span class="kw2">function</span> clearField<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span> &nbsp;<span class="co1">//Resets the calculator.</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;total = <span class="nu0">0</span>;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;activeNum = <span class="nu0">0</span>;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">isActive</span> = <span class="kw2">false</span>;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;decVal = <span class="nu0">-1</span>;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;activeFunc = addition;</p>
<p>&nbsp;<span class="br0">&#125;</span></p>
<p><span class="coMULTI">/*This meathod is called from the BaseFuncBtn class and is passed</p>
<p>&nbsp;the operator name of the key. &nbsp;Value received should be one of the</p>
<p>&nbsp;public constants declared earlier in this class.*/</span></p>
<p>&nbsp;<span class="kw3">public</span> <span class="kw3">static</span> <span class="kw2">function</span> funcKey<span class="br0">&#40;</span>str:<span class="kw3">String</span><span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span></p>
<p><span class="kw1">switch</span><span class="br0">&#40;</span>str<span class="br0">&#41;</span> <span class="br0">&#123;</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;add&quot;</span>:</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; equals<span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; activeFunc = addition;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;subtract&quot;</span>:</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; equals<span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; activeFunc = subtraction;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;multiply&quot;</span>:</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; equals<span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; activeFunc = multiplication;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;divide&quot;</span>:</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; equals<span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; activeFunc = division;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;clear&quot;</span>:</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw3">isActive</span><span class="br0">&#41;</span><span class="br0">&#123;</span> &nbsp;<span class="co1">//If you made a mistake while entering a number, this will forgive you a little.</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">isActive</span> = <span class="kw2">false</span>;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; activeNum = <span class="nu0">0</span>;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span> <span class="br0">&#123;</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; clearField<span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;equals&quot;</span>:</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">isActive</span> = <span class="kw2">true</span>; <span class="co1">//Set to &#8216;true&#8217; so you can repeat the last opperation over and over.</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; equals<span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;decimal&quot;</span>:</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>decVal &lt; <span class="nu0">0</span><span class="br0">&#41;</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; decVal = <span class="nu0">0</span>;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;positive/negative&quot;</span>:</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw3">isActive</span><span class="br0">&#41;</span><span class="br0">&#123;</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; activeNum *= <span class="nu0">-1</span>;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span> <span class="br0">&#123;</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; total *= <span class="nu0">-1</span>;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">default</span>:</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">trace</span><span class="br0">&#40;</span><span class="st0">&quot;Something went wrong. &nbsp;String was: &quot;</span> + str<span class="br0">&#41;</span>;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></p>
<p>&nbsp;<span class="br0">&#125;</span></p>
<p><span class="coMULTI">/*Called from the stage and is used to display the current values*/</span></p>
<p>&nbsp;<span class="kw3">public</span> <span class="kw3">static</span> <span class="kw2">function</span> getDispNum<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">String</span> <span class="br0">&#123;</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span><span class="br0">&#40;</span>decVal &lt; <span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#123;</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw3">isActive</span><span class="br0">&#41;</span><span class="br0">&#123;</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span><span class="br0">&#40;</span><span class="kw3">String</span><span class="br0">&#40;</span>activeNum<span class="br0">&#41;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span><span class="br0">&#40;</span><span class="kw3">String</span><span class="br0">&#40;</span>total<span class="br0">&#41;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span><span class="kw1">else</span> <span class="br0">&#123;</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/*If decVal is &gt;= 0 then isActive WILL be true, so this code</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; here isn&#8217;t all needed. But, it&#8217;s not hurting anything either&#8230;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; The computer was rounding decimals off weird (i.e. instead of 2.3</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; it would have something like 2.300000012) so I need .toFixed() for</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; the active number being entered.*/</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw3">isActive</span><span class="br0">&#41;</span><span class="br0">&#123;</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span><span class="br0">&#40;</span><span class="kw3">String</span><span class="br0">&#40;</span>activeNum.<span class="me1">toFixed</span><span class="br0">&#40;</span>decVal<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span><span class="br0">&#40;</span><span class="kw3">String</span><span class="br0">&#40;</span>total.<span class="me1">toFixed</span><span class="br0">&#40;</span>decVal<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></p>
<p>&nbsp;<span class="br0">&#125;</span></p>
<p><span class="kw3">private</span> <span class="kw3">static</span> <span class="kw2">function</span> equals<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span><span class="br0">&#40;</span><span class="kw3">isActive</span><span class="br0">&#41;</span><span class="br0">&#123;</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; total = activeFunc<span class="br0">&#40;</span>total, activeNum<span class="br0">&#41;</span>;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">isActive</span> = <span class="kw2">false</span>; &nbsp; <span class="co1">//Set to &#8216;false&#8217; so you can change your mind about the next opperation without re-calculating</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; decVal = <span class="nu0">-1</span>;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></p>
<p>&nbsp;<span class="br0">&#125;</span></p>
<p><span class="kw3">private</span> <span class="kw3">static</span> <span class="kw2">function</span> addition<span class="br0">&#40;</span>num1:<span class="kw3">Number</span>, num2:<span class="kw3">Number</span><span class="br0">&#41;</span>:<span class="kw3">Number</span> <span class="br0">&#123;</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span><span class="br0">&#40;</span>num1 + num2<span class="br0">&#41;</span>;</p>
<p>&nbsp;<span class="br0">&#125;</span></p>
<p>&nbsp;<span class="kw3">private</span> <span class="kw3">static</span> <span class="kw2">function</span> subtraction<span class="br0">&#40;</span>num1:<span class="kw3">Number</span>, num2:<span class="kw3">Number</span><span class="br0">&#41;</span>:<span class="kw3">Number</span> <span class="br0">&#123;</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span><span class="br0">&#40;</span>num1 &#8211; num2<span class="br0">&#41;</span>;</p>
<p>&nbsp;<span class="br0">&#125;</span></p>
<p>&nbsp;<span class="kw3">private</span> <span class="kw3">static</span> <span class="kw2">function</span> multiplication<span class="br0">&#40;</span>num1:<span class="kw3">Number</span>, num2:<span class="kw3">Number</span><span class="br0">&#41;</span>:<span class="kw3">Number</span> <span class="br0">&#123;</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span><span class="br0">&#40;</span>num1 * num2<span class="br0">&#41;</span>;</p>
<p>&nbsp;<span class="br0">&#125;</span></p>
<p>&nbsp;<span class="kw3">private</span> <span class="kw3">static</span> <span class="kw2">function</span> division<span class="br0">&#40;</span>num1:<span class="kw3">Number</span>, num2:<span class="kw3">Number</span><span class="br0">&#41;</span>:<span class="kw3">Number</span> <span class="br0">&#123;</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span><span class="br0">&#40;</span>num1 / num2<span class="br0">&#41;</span>;</p>
<p>&nbsp;<span class="br0">&#125;</span></p>
<p><span class="br0">&#125;</span></p>
<p><span class="br0">&#125;</span></div>
<p>Notice that almost everything in that class is STATIC.   This is so we don&#8217;t have to create an instance of the class to use them.   For example, in my <strong>OnEnterFrame</strong> function I used <strong>digitDisplay.text = Calc.getDispNum();</strong>  The <strong>digitDisplay</strong> is an instance of a textField that I put on the stage, while <strong>Calc</strong> is just my class.</p>
<p>The last thing that needs to be done is entering a little bit of code that needs to be run when you click a button.  That was some fun code to come up with (not really):</p>
<div class="dean_ch" style="white-space: wrap;"><span class="coMULTI">/******In the BaseDigitBtn class********/</span></p>
<p>&nbsp;<span class="kw3">private</span> <span class="kw2">function</span> <span class="kw3">OnRelease</span><span class="br0">&#40;</span>event:MouseEvent<span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<span class="coMULTI">/*This just resets the active number before the next opperation. &nbsp;I don&#8217;t</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;want to erase the old active number till the last second so that I can</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;repeat the last opperation by pressing equals again.*/</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span><span class="br0">&#40;</span>!Calc.<span class="kw3">isActive</span><span class="br0">&#41;</span><span class="br0">&#123;</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Calc.<span class="me1">activeNum</span> = <span class="nu0">0</span>;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span><span class="br0">&#40;</span>Calc.<span class="me1">decVal</span> &lt; <span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#123;</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>Calc.<span class="me1">activeNum</span> &gt;= <span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#123;</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Calc.<span class="me1">activeNum</span> = Calc.<span class="me1">activeNum</span> * <span class="nu0">10</span> + num;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span> <span class="br0">&#123;</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Calc.<span class="me1">activeNum</span> = Calc.<span class="me1">activeNum</span> * <span class="nu0">10</span> &#8211; num;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span><span class="kw1">else</span> <span class="br0">&#123;</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>Calc.<span class="me1">decVal</span> &lt; <span class="nu0">20</span><span class="br0">&#41;</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Calc.<span class="me1">decVal</span>++;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Decimals are annoying.</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>Calc.<span class="me1">activeNum</span> &gt;= <span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#123;</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Calc.<span class="me1">activeNum</span> = Calc.<span class="me1">activeNum</span> + <span class="br0">&#40;</span>num / <span class="kw3">Math</span>.<span class="kw3">pow</span><span class="br0">&#40;</span><span class="nu0">10</span>, Calc.<span class="me1">decVal</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span> <span class="br0">&#123;</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Calc.<span class="me1">activeNum</span> = Calc.<span class="me1">activeNum</span> &#8211; <span class="br0">&#40;</span>num / <span class="kw3">Math</span>.<span class="kw3">pow</span><span class="br0">&#40;</span><span class="nu0">10</span>, Calc.<span class="me1">decVal</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Calc.<span class="kw3">isActive</span> = <span class="kw2">true</span>;</p>
<p>&nbsp;<span class="br0">&#125;</span></p>
<p><span class="coMULTI">/************And in the BaseFuncBtn class**********/</span></p>
<p>&nbsp;<span class="kw3">private</span> <span class="kw2">function</span> <span class="kw3">OnRelease</span><span class="br0">&#40;</span>event:MouseEvent<span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Calc.<span class="me1">funcKey</span><span class="br0">&#40;</span>str<span class="br0">&#41;</span>;</p>
<p>&nbsp;<span class="br0">&#125;</span></div>
<p>A quick explination of the BaseDigitBtn&#8217;s OnRelease function and then we are done:<br />
Entering numbers on a calculator always places the new digit to the far right.  That is easy to take care of by multiplying by 10 to shift what you have to the left and then adding your new number&#8230; untill you try to enter decimals.  With decimals you have to divide by the next highest power of 10 for every spot you move to the right and this can cause some rounding errors.  I take care of that in <strong>Calc.getDispNum();</strong> with the <strong>.toFixed()</strong> which will cut it off and not show the 12,000,000th of a unit that it&#8217;s off.</p>
<p><strong>You can download the source files for this tutorial here:</strong> <a href="http://www.clickpopmedia.com/wp-content/uploads/2008/03/calculator.zip" title="Calculator Flash Source">Calculator Flash Source</a></p>
<p>It shouldn&#8217;t take long at all to add a square root operator key or sin/cos/tan keys.  Try it yourself.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.clickpopmedia.com/2008/03/03/putting-static-to-good-use/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Answers to ALL your ActionScript questions.</title>
		<link>http://www.clickpopmedia.com/2008/02/19/answers-to-all-your-actionscript-questions/</link>
		<comments>http://www.clickpopmedia.com/2008/02/19/answers-to-all-your-actionscript-questions/#comments</comments>
		<pubDate>Tue, 19 Feb 2008 17:54:28 +0000</pubDate>
		<dc:creator>Paul</dc:creator>
				<category><![CDATA[Paul]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Intro]]></category>

		<guid isPermaLink="false">http://www.clickpopmedia.com/2008/02/19/answers-to-all-your-actionscript-questions/</guid>
		<description><![CDATA[ As a designer you might be really excited about the power Flash CS3 has to offer you, but a little frustrated with the complicated ActionScript required to turn your vision into reality.  Or maybe, as a Flash developer you are getting hung up on the difficult transition from ActionScript 2.0 to AS 3.0. [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.clickpopmedia.com/wp-content/uploads/2008/02/paul_blackshirt_lookingupright.jpg" alt="Paul_Icon" style="padding-right: 5px" align="left" height="96" width="96" /> As a designer you might be really excited about the power Flash CS3 has to offer you, but a little frustrated with the complicated ActionScript required to turn your vision into reality.  Or maybe, as a Flash developer you are getting hung up on the difficult transition from ActionScript 2.0 to AS 3.0. Well, it&#8217;s my job here to try and help you through that learning process.</p>
<p>I&#8217;m going to be trying to post a new ActionScript 3.0 tutorial once a week (and maybe some AS 2.0 tutorials if requested)  every Monday.  If you have any specific requests or questions you can ask them in a post comment or send me an e-mail at <a href="mailto:Paul@ClickPopMedia.com?subject=Tutoral%20Request%20or%20Question">Paul@ClickPopMedia.com</a>.  If you are looking for more immediate answers there is a great resource for ActionScript help at <a href="http://actionscript.org/">ActionScript.org</a>.  You might see me answering questions in their forum (as TomMalufe) or see some of my tutorials posted there.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.clickpopmedia.com/2008/02/19/answers-to-all-your-actionscript-questions/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

