<?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>polygonal labs</title>
	<atom:link href="http://lab.polygonal.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://lab.polygonal.de</link>
	<description>game development blog</description>
	<lastBuildDate>Thu, 15 Jul 2010 15:43:03 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>MemoryManager revisited</title>
		<link>http://lab.polygonal.de/2010/03/15/memorymanager-revisited/</link>
		<comments>http://lab.polygonal.de/2010/03/15/memorymanager-revisited/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 14:57:43 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Actionscript]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://lab.polygonal.de/?p=1230</guid>
		<description><![CDATA[Starting with DS version 1.1, there is now a new MemoryManager available, which was almost written from scratch. My past experience showed that the former implementation was somewhat limited, as you were forced to preallocate a fixed amount of memory prior to your application&#8217;s entry point. The new version now supports dynamic memory allocation, so [...]]]></description>
			<content:encoded><![CDATA[<p>Starting with DS version 1.1, there is now a new MemoryManager available, which was almost written from scratch. My past experience showed that the <a href="http://lab.polygonal.de/2009/03/14/a-little-alchemy-in-hx3ds/">former implementation</a> was somewhat limited, as you were forced to preallocate a fixed amount of memory prior to your application&#8217;s entry point. The new version now supports dynamic memory allocation, so memory consumption grows with application demand (you can still define an upper limit to be on the safe side). It&#8217;s now also possible to resize memory space after it has been allocated. I&#8217;ve also simplified the API and optimized the code.</p>
<p>Using alchemy memory in HaXe is now as simple as writing:</p>
<pre class="prettyprint">
var integerArray = new IntMemory(x);
integerArray.free();
</pre>
<p>The first line allocates space for storing x 32-bit integers, and the second line will free up used memory once it&#8217;s no longer needed. The same also applies to BitMemory (a bit vector), ShortMemory (16-bit integers), FloatMemory (32-bit IEEE 754 single-precision floats) and DoubleMemory (64-bit IEEE 754 double-precision floats). Each implementation provides a get/set method to read/write the value from/to index i (I hope HaXe gets support for overriding [] in the future so we can omit the get()/set() methods); an offset property that stores the memory offset in bytes and a bytes property indicating the number of allocated bytes. Custom classes can be realized by inheriting from the abstract MemoryAccess class (yes, HaXe has private constructors ;-))</p>
<div style="border: 1px solid #cccccc";>
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_memorymanager_915867257"
			class="flashmovie"
			width="598"
			height="40">
	<param name="movie" value="http://lab.polygonal.de/wp-content/articles/memorymanager_revisted/memorymanager.swf" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="http://lab.polygonal.de/wp-content/articles/memorymanager_revisted/memorymanager.swf"
			name="fm_memorymanager_915867257"
			width="598"
			height="40">
	<!--<![endif]-->
		
	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object></div>
<div align="center"><small>A visual representation of the MemoryManager (<strong>roll over</strong>). Randomly allocates and deallocates memory while calling pack() at regular intervals. Colored blocks: allocated space; Black: empty space; White lines: block size.</small></div>
<p>Frequent allocation/deallocation leads to fragmentation so the user can request defragmentation by calling <em>MemoryManager.defrag()</em>. In addition to the defrag() method, <em>MemoryManager.pack()</em> frees up unused space so it can be garbage collected. To be exact: All existing bytes are copied from the current ByteArray accessed by the alchemy memory opcodes to a smaller ByteArray, and once the reference to the former ByteArray is GC&#8217;ed the former content is deallocated (setting the .length property of the ByteArray seems to be a bit flaky and sometimes results in a runtime exception).</p>
<p>A quick note about MemoryManager.BLOCK_SIZE_BYTES: This value defines the growth-rate of the memory. The default is 1024 bytes (must be a power of 2). Every time the MemoryManager runs out of memory, a multiple of this block size is added. The block size affects performance and storage efficiency. As a rule of thumb the block size should match the average size of all &#8216;memory arrays&#8217; used in the application. Using a tiny block size when storing 2k images is obviously a bad idea.</p>
<p>A major advantage of using alchemy memory is that you can use the appropriate data size that fits your needs which brings down memory usage. For example if you know in advance that your numbers are in the range 0&#8230;100 you can use bytes, or if you need floats without full 64-bit precision, you can fall back to 32-bit floats. In AS3, you are constrained to 32-bit integers or 64-bit double precision floats. Using the ByteArray is not an option because it&#8217;s too <a href="http://code.google.com/p/polygonal/wiki/FlashPlayerContainerPerformance">slow</a>.</p>
<h4>Performance</h4>
<p>Although the preview version of FP 10.1 slowed down memory access a bit (it seems that the latest release fixes most performance issues) using those special alchemy memory opcodes is by far the best way to work with numbers. Time for some real world examples!</p>
<h4>Example 1: JPEG encoding</h4>
<p>After <a href="http://code.google.com/p/polygonal/source/browse/trunk/src/lib/de/polygonal/gl/codec/JPEGEncode.hx">porting</a> the JPEG encoder from the Flex framework (mx.graphics.codec) to HaXe I&#8217;ve encoded an empty 1024&#215;786 bitmap and compared the numbers:</p>
<p><img src="http://lab.polygonal.de/wp-content/articles/memorymanager_revisted/chart_alchemy_jpeg.png" alt="" />
<div align="center"><small>Speed relative to the AS3 version (higher is better)</small></div>
<p>The HaXe version encodes the image in about 100 milliseconds, the AS3 version takes almost a second.</p>
<h4>Example 2: Bit vectors</h4>
<p>My next test compares an AS3 bit vector implementation from <a href="http://blog.generalrelativity.org/actionscript-30/avm2-memory-considerations-and-bit-vectors/">generalrelativity.org</a> with the BitMemory from the <a href="http://code.google.com/p/polygonal/wiki/DataStructures">ds</a> package:</p>
<p><img src="http://lab.polygonal.de/wp-content/articles/memorymanager_revisted/chart_alchemy_bitvector.png" alt="" />
<div align="center"><small>Speed relative to the AS3 version (higher is better)</small></div>
<p>Combining alchemy memory, optimized byte code and inlining gives some excellent results :)</p>
<h4>Example 3: FP10 drawing API</h4>
<p>The last test draws triangles with the FP10 drawing API and measures the time needed to build a GraphicsPath object from a command and a data vector (without calling graphics.drawGraphicsData()). The HaXe version uses my VectorRenderer class which utilizes alchemy memory as a temporary buffer.</p>
<p><img src="http://lab.polygonal.de/wp-content/articles/memorymanager_revisted/chart_alchemy_vectorrendering.png" alt="" />
<div align="center"><small>Speed relative to the AS3 version (higher is better)</small></div>
<p>All results are based on the windows release player 10,0,42,34 and use the MemoryManager class.</p>
]]></content:encoded>
			<wfw:commentRss>http://lab.polygonal.de/2010/03/15/memorymanager-revisited/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Traversing the display list</title>
		<link>http://lab.polygonal.de/2010/02/02/traversing-the-display-list/</link>
		<comments>http://lab.polygonal.de/2010/02/02/traversing-the-display-list/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 21:32:21 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Actionscript]]></category>
		<category><![CDATA[Games]]></category>

		<guid isPermaLink="false">http://lab.polygonal.de/?p=1198</guid>
		<description><![CDATA[A great HaXe feature is that you can define your own Iterator and execute it with the for-syntax.
It can be used in many different ways and drastically improves readability of your code. AS3 developers often need to look at the display list, so I wrote a basic DisplayListIterator to handle this task. Here is an [...]]]></description>
			<content:encoded><![CDATA[<p>A great HaXe feature is that you can define your own <a href="http://haxe.org/ref/iterators">Iterator</a> and execute it with the for-syntax.<br />
It can be used in many different ways and drastically improves readability of your code. AS3 developers often need to look at the display list, so I wrote a basic <a href="http://code.google.com/p/polygonal/source/browse/trunk/src/lib/de/polygonal/gl/DisplayListIterator.hx">DisplayListIterator</a> to handle this task. Here is an example:</p>
<pre class="prettyprint">
using de.polygonal.gl.DisplayListIterator;
...
for (i in Lib.current.stage) trace(i);
</pre>
<p>This will print out <em>all</em> display objects in the display list.</p>
<p>If you are not familiar with <a href="http://haxe.org/">HaXe</a>, <em>Lib.current.stage</em> points to the MovieClip of the Document class, and the <em>using</em> statement automatically creates a DisplayListIterator whenever it is called on a DisplayObjectContainer. So the statement &#8216;Class.method(arg)&#8217; is transformed to &#8216;arg.method()&#8217;. Without &#8216;using&#8217; I would have to write:</p>
<pre class="prettyprint">
import de.polygonal.gl.DisplayListIterator;
...
for (i in new DisplayListIterator(Lib.current.stage)) trace(i);
</pre>
<p>Let&#8217;s finish with a simple example that changes the text color of all text fields to red inside a DisplayObjectContainer.</p>
<pre class="prettyprint">
var container:Sprite = myTextFieldContainer;
for (i in container)
{
  if (Std.is(i, TextField))
  {
    cast(i, TextField).textColor = 0xff0000;
  }
}
</pre>
<p>Useful, isn&#8217;t it :)</p>
]]></content:encoded>
			<wfw:commentRss>http://lab.polygonal.de/2010/02/02/traversing-the-display-list/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Font rendering with the FP10 drawing API</title>
		<link>http://lab.polygonal.de/2009/12/15/font-rendering-with-the-fp10-drawing-api/</link>
		<comments>http://lab.polygonal.de/2009/12/15/font-rendering-with-the-fp10-drawing-api/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 00:09:01 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Actionscript]]></category>

		<guid isPermaLink="false">http://lab.polygonal.de/?p=916</guid>
		<description><![CDATA[After all the vector/font rendering library is done &#8211; the HaXe sources and SWC files for ActionScript 3.0 are available on the polygonal google code project page.  As a reminder &#8211; the project started as an experiment if it&#8217;s possible to render fonts using the FP10 drawing API without loading or embedding any additional [...]]]></description>
			<content:encoded><![CDATA[<p>After all the vector/font rendering library is done &#8211; the HaXe sources and SWC files for ActionScript 3.0 are available on the <a href="http://code.google.com/p/polygonal/">polygonal google code project page</a>.  As a reminder &#8211; the project started as an experiment if it&#8217;s possible to render fonts using the FP10 drawing API <em>without</em> loading or embedding any additional assets.</p>
<p>For obvious reasons, I can only include free fonts. At the moment the de.polygonal.graphics.text.fonts package contains Microsoft&#8217;s TrueType core fonts hosted on <a href="http://corefonts.sourceforge.net/">sourceforge</a>, the <a href="http://www.gnome.org/fonts/">Bitstream Vera fonts</a> as well as the famous <a href="http://www.04.jp.org/">bitmap04 pixel fonts</a>.</p>
<h4>The pros and cons</h4>
<p>Pros:</p>
<ul>
<li>No font embedding required :) Import a font class and you are ready to go </li>
<li>Provides high quality font rendering; best used for extra smooth text animation</li>
<li>Seriously fast!</li>
<li>Seamless integration into the FP 10 drawing API</li>
</ul>
<p>Cons:</p>
<ul>
<li>An ASCII set of printable characters adds about 20kb-30kb to the swf file &#8211; I&#8217;ll try to reduce this in a future release.</li>
<li>Not very readable at small font sizes (except pixel fonts) because it does not include any hinting information for improving the quality &#8211; text remains legible down to about 12 points (viewed at 100%)</li>
<li>You need a copy of Fontographer 4.1 to convert ttf files</li>
<li>No text field functionality yet</li>
<li>Only supports ASCII character (latin character set like ISO-8859 is planned)</li>
</ul>
<h4>Examples</h4>
<p>Here are the &#8216;MS core fonts for the web&#8217; rendered with the font library:</p>
<div style="border: 1px solid #cccccc";>
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_coreweb_1370469802"
			class="flashmovie"
			width="598"
			height="700">
	<param name="movie" value="http://lab.polygonal.de/wp-content/articles/goodbye_textfields/coreweb.swf" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="http://lab.polygonal.de/wp-content/articles/goodbye_textfields/coreweb.swf"
			name="fm_coreweb_1370469802"
			width="598"
			height="700">
	<!--<![endif]-->
		
	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object></div>
<div align="center"><small>MS core fonts for the web</small></div>
<p>This also works amazingly well for pixel fonts (which I didn&#8217;t expect at all):</p>
<div style="border: 1px solid #cccccc";>
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_bitmap04_275418352"
			class="flashmovie"
			width="598"
			height="500">
	<param name="movie" value="http://lab.polygonal.de/wp-content/articles/goodbye_textfields/bitmap04.swf" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="http://lab.polygonal.de/wp-content/articles/goodbye_textfields/bitmap04.swf"
			name="fm_bitmap04_275418352"
			width="598"
			height="500">
	<!--<![endif]-->
		
	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object></div>
<div align="center"><small>Bitmap04 pixel font</small></div>
<h4>How it works</h4>
<p>First a .ttf file is loaded into Fontographer and exported as a postscript file (I tried other methods but I stuck with this approach because postscript files are easy to understand). A parser reads this file and generates a HaXe class that contains the glyph data. The result is something like this: <a href="http://code.google.com/p/polygonal/source/browse/trunk/src/lib/de/polygonal/graphics/text/fonts/coreweb/Arial.hx">Arial.hx</a>.</p>
<p>If using HaXe, the <em>font_inline</em> compiler flag gives you control over compilation time vs runtime performance. If omitted, compilation is fast so it&#8217;s best suited for frequent testing and debugging and the compiler-based auto-completion remains responsive. If compiled with <em>-D font_inline</em>, compilation is slow but results in the best performance.</p>
<p>The actual rendering is done by a class named <em>de.polygonal.graphics.VectorRenderer</em>. It uses the FP 10 drawing API in conjunction with &#8216;alchemy memory&#8217; as a temporary buffer to gain some extra speed. At first all drawing commands are written into a chunk of memory, then copied into a vector and finally sent to the screen via <em>graphics.drawGraphicsData(&#8230;)</em>. Depending on the CPU this is roughly 1.5-4x faster than using only vector. Note that this only accelerates the process of preparing the data, not the rendering itself (everything beyond <em>drawGraphicsData()</em>)</p>
<h4>ActionScript 3.0 usage</h4>
<p>Grab the SWC file, add it to the library and the following code should (hopefully) compile fine:</p>
<pre class="prettyprint">
package
{
  import de.polygonal.ds.mem.MemoryManager;
  import de.polygonal.graphics.text.fonts.coreweb.Arial;
  import de.polygonal.graphics.VectorRenderer;
  import flash.display.MovieClip;
  import flash.Boot;

  public class Main extends MovieClip
  {
    public function Main():void
    {
      new Boot(this);
      MemoryManager.allocate(4096);

      var vr:VectorRenderer = new VectorRenderer(512);
      vr.setLineStyle(0, 1, 0);

      var font:Arial = new Arial();
      font.bezierThreshold = 0.001;
      font.setPointSize(100);
      font.setRenderer(vr);
      font.write("Hello World!", 0, 100, false);

      vr.flush(graphics);
    }
  }
}
</pre>
<p>The source code reads like this:</p>
<ul>
<li>initialize HaXe specific things</li>
<li>allocate 4 megs of alchemy memory to be on the safe side</li>
<li>create a vector renderer using a buffer size of 512kb</li>
<li>assign a line style (rgb, alpha, thickness)</li>
<li>create a font object</li>
<li>define curve smoothness, the smaller, the better (0=linear approx. using 2 segments/curve)</li>
<li>set the font size: 100 equals 72pt or one inch.</li>
<li>assign a renderer so the font can send drawing commmands to it</li>
<li>draw &#8220;Hello, World!&#8221; at the coordinates 0,100 (x,y), if the last parameter is true, the text will be centered around (x,y)</li>
<li>flush the buffer which draws everything to the screen</li>
</ul>
<h4>Glyph and text bounds</h4>
<p>You can compute axis aligned bounding boxes for the whole text block or individual characters using the getBounds() and getIndividualBounds() methods prior to drawing the text:</p>
<div style="border: 1px solid #cccccc";>
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_fontbounds_281318039"
			class="flashmovie"
			width="598"
			height="520">
	<param name="movie" value="http://lab.polygonal.de/wp-content/articles/goodbye_textfields/fontbounds.swf" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="http://lab.polygonal.de/wp-content/articles/goodbye_textfields/fontbounds.swf"
			name="fm_fontbounds_281318039"
			width="598"
			height="520">
	<!--<![endif]-->
		
	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object></div>
<div align="center"><small>Different ways of computing boundaries</small></div>
<h4>Creating font classes</h4>
<p>Converting fonts can be done using <a href="http://www.polygonal.de/doc/types/de/polygonal/gl/text/util/EPSConvert.html">de.polygonal.gl.text.util.EPSConvert</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://lab.polygonal.de/2009/12/15/font-rendering-with-the-fp10-drawing-api/feed/</wfw:commentRss>
		<slash:comments>33</slash:comments>
		</item>
		<item>
		<title>New data structures library released</title>
		<link>http://lab.polygonal.de/2009/12/11/new-data-structures-library-released/</link>
		<comments>http://lab.polygonal.de/2009/12/11/new-data-structures-library-released/#comments</comments>
		<pubDate>Fri, 11 Dec 2009 22:31:11 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Actionscript]]></category>

		<guid isPermaLink="false">http://lab.polygonal.de/?p=961</guid>
		<description><![CDATA[I&#8217;ve just released the first official version of &#8216;ds&#8216; (aka data structures), the successor of as3ds which is written in the HaXe language. (The name hx3ds was used during development and is obsolete because ds is now a module of the polygonal library).
The library is found here: http://code.google.com/p/polygonal/. There is also wiki page describing how [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just released the first official version of &#8216;<strong>ds</strong>&#8216; (aka data structures), the successor of <a href="http://lab.polygonal.de/ds/">as3ds</a> which is written in the HaXe language. (The name <em>hx3ds</em> was used during development and is obsolete because <strong>ds</strong> is now a module of the polygonal library).</p>
<p>The library is found here: <a href="http://code.google.com/p/polygonal/">http://code.google.com/p/polygonal/</a>. There is also <a href="http://code.google.com/p/polygonal/wiki/UsingActionScript3">wiki page</a> describing how to use it with ActionScript 3.0 (there are still some issues with the HaXe generated SWC files, I hope Nicolas finds some time to address them in a future release).</p>
<h4>What&#8217;s new</h4>
<p>The new release (<a href="http://code.google.com/p/polygonal/wiki/DataStructures">changelog</a>) contains many bug fixes, new features and a refined <a href="http://www.polygonal.de/doc/">documentation</a>. While there are still many things on my TODO list, I think the library is stable enough so it deserves to be the first major release. And since I&#8217;m using the library in all of my projects, you can expect some regular updates.</p>
<h4>Why the heck HaXe !?</h4>
<p>Firstly, ActionScript 3.0 doesn&#8217;t support any kind of generics/templates like Java does for example. The typed vectors introduced in FP10 are too crippled and limited so in the end you are still stuck with dynamic containers, which is a bad for complex projects. HaXe supports <strong>type parameters</strong> &#8211; in the image below you see that I&#8217;ve created a graph of stacks of hash maps and everything is typed. The nice thing is that you still get auto-completion:</p>
<p><img src="http://lab.polygonal.de/wp-content/pics/fd_haxe_autocompletion.png" alt="FlashDevelop HaXe AutoCompletion" /></p>
<p>Secondly, HaXe provides a lot of <strong>syntax sugar</strong> that sweetens your daily coding experience. As an example, consider iterating over a collection. In HaXe it&#8217;s just:</p>
<pre class="prettyprint lang-html">
//iterate over all elements of a 2D array:
var a = new Array2&lt;Int&gt;(3, 3);
for (i in a) trace(i);
</pre>
<p>In AS3 you have to create an iterator object and explicitly call the next() and hasNext() methods:</p>
<pre class="prettyprint lang-html">
var a:Array2 = new Array2(3, 3);
var itr:Object = a.iterator();
while (itr.hasNext())
{
  var element:* = itr.next();
  trace(element);
}
</pre>
<p>In general, HaXe implicitly does a lot of things for you! Probably one of the best language feature is type inference/implicit typing, which is absolutely brilliant for quick prototyping. It&#8217;s like writing AS1 but without compromising speed and type safety. At first it&#8217;s hard to get used to it because all ActionScript text books never get tired of repeating how important typing is and that everything should be typed. But If you think about it, the compiler should handle it where possible and relieve the developer from writing clumsy types over and over again:</p>
<pre class="prettyprint lang-html">
//AS3
var n:Number = 1;
var i:int = 1;

//HaXe
var f = 1.0; //compiler infers that n is a float
var i = 1; //compiler infers that n is an int
</pre>
<p>Thirdly, because as3ds was all about efficiency I couldn&#8217;t resist HaXe because it&#8217;s much faster. From my experience, <strong>ds</strong> performs ~2-6x better than as3ds. Same runtime, huge difference!</p>
]]></content:encoded>
			<wfw:commentRss>http://lab.polygonal.de/2009/12/11/new-data-structures-library-released/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Updates</title>
		<link>http://lab.polygonal.de/2009/12/11/updates-3/</link>
		<comments>http://lab.polygonal.de/2009/12/11/updates-3/#comments</comments>
		<pubDate>Fri, 11 Dec 2009 22:24:33 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://lab.polygonal.de/?p=1055</guid>
		<description><![CDATA[After a long silence it&#8217;s time to update my blog again. So what happened? I moved from AS3 to HaXe and actually published my first flash game written in HaXe. This was a very ambitious job and virtually took all my time because in addition to a very tight deadline I had to port my [...]]]></description>
			<content:encoded><![CDATA[<p>After a long silence it&#8217;s time to update my blog again. So what happened? I moved from AS3 to HaXe and actually published my first flash game written in HaXe. This was a very ambitious job and virtually took all my time because in addition to a very tight deadline I had to port my AS3 libraries to HaXe.</p>
<p>By the time the game was finished I started to work on a single open source library called <em>polygonal</em> as a replacement for the <em>as3ds</em> and <em>motor2</em> project. The latter simply became unmanageable as it was using many other small libraries &#8211; so it made sense to bundle everything and provide a single out of the box solution, rather than creating a bunch of small projects.</p>
<p>Meanwhile, the polygonal project is hosted here: <a href="http://code.google.com/p/polygonal/">http://code.google.com/p/polygonal/</a><br />
The next task is to update the <a href="http://www.motorphysics.de/">physics engine</a> so it compiles against the new library.</p>
]]></content:encoded>
			<wfw:commentRss>http://lab.polygonal.de/2009/12/11/updates-3/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
