<?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"
	>

<channel>
	<title>Soulwire</title>
	<atom:link href="http://blog.soulwire.co.uk/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.soulwire.co.uk</link>
	<description>Art, Actionscript and everything else that tickles my fancy</description>
	<pubDate>Thu, 03 Jul 2008 18:14:16 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>AS3 webcam Motion Tracking</title>
		<link>http://blog.soulwire.co.uk/flash/actionscript-3/webcam-motion-detection-tracking/</link>
		<comments>http://blog.soulwire.co.uk/flash/actionscript-3/webcam-motion-detection-tracking/#comments</comments>
		<pubDate>Fri, 06 Jun 2008 17:24:18 +0000</pubDate>
		<dc:creator>Soulwire</dc:creator>
		
		<category><![CDATA[Actionscript 3.0]]></category>

		<category><![CDATA[experiments]]></category>

		<category><![CDATA[flash]]></category>

		<guid isPermaLink="false">http://blog.soulwire.co.uk/?p=72</guid>
		<description><![CDATA[ 	Update
Ok, you can now grab the MotionTracker source code. Version 2 eventually will include the other methods for detecting and tracking motion which I mentioned. For now I have just included code for the technique used in the demo.
For those of you without access to a webcam (and as an example of a practical [...]]]></description>
			<content:encoded><![CDATA[<p> 	<strong>Update</strong></p>
<p>Ok, you can now grab the <a title="Download AS3 Motion Tracker source code" href="http://blog.soulwire.co.uk/uploads/2008/06/motion-tracking-source.zip">MotionTracker source code</a>. Version 2 eventually will include the other methods for detecting and tracking motion which I mentioned. For now I have just included code for the technique used in the demo.<span id="more-72"></span></p>
<p>For those of you without access to a webcam (and as an example of a practical use for this class) here is a short video demonstrating the program I wrote for the installation piece.</p>
<div class="swf">
<div id="mdex"></div>
</div>
<p><script type="text/javascript">swfobject.embedSWF("http://blog.soulwire.co.uk/uploads/2008/06/motion-tracking-ex.swf", "mdex", "586", "438", "9.0.0");</script></p>
<p><strong>End of update</strong></p>
<p><em>Webcam required (obviously&#8230;)</em></p>
<p>I’m currently working on putting up a show, part of which will be a live generative piece, constructed from the movement of visitors in the gallery space. So of course I needed a method for not only detecting but tracking motion. I’ve seen some of Grant Skinner and Mario Klingemann&#8217;s incredible experiments in this field, the most accurate of which used a coloured object in the camera’s field of vision (such as a ball or glove) to track movement, however I wanted the live response of the artwork to be a surprise to the viewer, and so asking them to hold a coloured object would have detracted from the overall impact.</p>
<p>If you ever want to be amazed by the human mind, try recreating the tasks that it performs, particularly those which we take for granted; you will quickly realise the incredible amount of computation which must be happening just to, for example, detect movement and track an object, or to discern more than one object and their relative motions, velocities and distances. This isn’t an essay on Neuroscience though so I’ll save that for another time&#8230;</p>
<p>Anyway; I researched the concept of motion tracking, and made some notes on my own ideas. A few possible approaches emerged.</p>
<p>One of the most attractive ideas was to <strong>divide the screen into a grid</strong>, and average the colours within each segment at regular intervals. The difference in brightness within each segment (from one calculation to the next) would determine whether or not motion had occurred in this area of the screen. Using this data, clusters of segments with a high rate of change could be used to assume an object in motion. This approach is quite accurate, however it would require a lot of <em>getPixel</em> and <em>setPixel</em>, as well as converting these results into <em>Hue, Saturation, Brightness</em> objects; all of which would be quite processor heavy. A decent computer could handle this fairly easily, however I had to also consider the processing load of the actual generative work running over the top.</p>
<p>The method I used in the end was much lighter, and providing the parameters could be adjusted to suit the environment, it would yield enough accuracy to provide a quite responsive tracking point for the artwork to follow.</p>
<p><strong>Here’s how it works</strong></p>
<ul>
<li>After the camera object is set up, it is passed to a <strong>MotionTracker</strong> class I wrote, which extends the <em>Point</em> object. The <em>MotionTracker</em> class contains two <em>BitmapData</em> objects; one representing the current data from the webcam, the other is used to store the previous frame.</li>
<li>When the <em>update</em> method is called, the new frame is drawn on top of the previous using the <em>difference filter</em>.</li>
<li>The result then has a <em>ColorMatrixFilter</em> applied to it, increasing the contrast of the image and dropping the darker areas (with less movement) further into the background.</li>
<li>A <em>blur filter</em> is then applied in order to further reduce noise and to form blobs from areas where more movement is occurring.</li>
<li>The threshold method is then called in the resulting BitmapData, effectively causing all near black pixels to be ignored and all light pixels (where movement has been detected) to be set to a certain colour.</li>
</ul>
<p>So that takes care of the motion detection, but <em><strong>what about the tracking</strong></em>?</p>
<ul>
<li>First we call the <em>getColorBoundsRect</em> method on the <em>BitmapData</em> object, which gives us a <em>Rectangle</em> object representing the area occupied by pixels of the colour we used when applying the threshold filter.</li>
<li>If the rectangle has an area larger than a specified constant, then sufficient movement is occurring and it can be tracked <em>(choosing to ignore small areas of movement helps to eradicate noise caused by background and other interferences)</em>.</li>
<li>We then find the <em>centre point</em> of this rectangle, and then move the x and y position of the <em>MotionTracker</em> instance to these coordinates, applying some gentle <em>easing</em> to give more continuity to the movement.</li>
</ul>
<p>I will post some source code once the <em>MotionTracker</em> class has been refined, and once I have build a nicer API so that, amongst other things, you can create your own UI for tweaking parameters at runtime; a useful feature if you have requirements such as mine where getting the most accuracy from a particular environment is important.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.soulwire.co.uk/flash/actionscript-3/webcam-motion-detection-tracking/feed/</wfw:commentRss>
		</item>
		<item>
		<title>2D Cellular Automata</title>
		<link>http://blog.soulwire.co.uk/flash/actionscript-3/2d-cellular-automata/</link>
		<comments>http://blog.soulwire.co.uk/flash/actionscript-3/2d-cellular-automata/#comments</comments>
		<pubDate>Tue, 06 May 2008 12:16:41 +0000</pubDate>
		<dc:creator>Soulwire</dc:creator>
		
		<category><![CDATA[Actionscript 3.0]]></category>

		<category><![CDATA[actionscript 3]]></category>

		<category><![CDATA[biology]]></category>

		<category><![CDATA[experiments]]></category>

		<category><![CDATA[flash]]></category>

		<category><![CDATA[Generative]]></category>

		<guid isPermaLink="false">http://blog.soulwire.co.uk/?p=69</guid>
		<description><![CDATA[ 	Inspired by Conway’s game of life (to which I was a late comer but now a devotee!), I decided to program a 2 dimensional Cellular Automaton in Actionscript 3.
I had been reading up on complexity theory for a recent project and the Cellular Automata just kept on rearing its head. Of course it displays [...]]]></description>
			<content:encoded><![CDATA[<p> 	Inspired by <strong>Conway’s game of life</strong> (to which I was a late comer but now a devotee!), I decided to program a <strong>2 dimensional Cellular Automaton</strong> in Actionscript 3.</p>
<p>I had been reading up on complexity theory for a recent project and the Cellular Automata just kept on rearing its head. Of course it displays the fundamental qualities of complexity; starting with an object following a set of simple rules and then creating multiple instances to form complex and unpredictable patterns.<span id="more-69"></span></p>
<p>In terms of visualisation, the Cellular Automata is interesting because it has potential to be used for many applications. Complexity Theory and Systems Theory are used to simulate various growth patterns such as that of a city or population. My personal ideas are of course much simpler, one being a 3 dimensional version which uses <strong>Papervision 3D</strong>; and, rather than switching cells on or off, would incrementally grow or shrink shapes in 3D space to create landscapes or cityscapes whose growth is determined by the development of the Automata.</p>
<p>This particular Actionscript 3 version is a fairly direct port of the 2 dimensional ‘Game of Life’ permutation, but is fun to play with none-the-less.</p>
<p><strong>The rules are as follows:</strong></p>
<p>Each cell can be either <strong>empty</strong>, <strong>new</strong>, <strong>alive </strong>or <strong>dead</strong>. As the grid updates, each cell observes its 8 neighbouring cells (or less if it is at a corner or edge) and changes it&#8217;s state depending on the state of said neighbouring cells.</p>
<ul>
<li>If <strong>less than 2 neighbours</strong> are alive, the cell dies <em>(loneliness)</em></li>
<li>If <strong>more than 3 neighbours</strong> are alive, the cell dies <em>(overcrowding)</em></li>
<li>If a living cell has <strong>2 or 3 living neighbours</strong> it continues to live</li>
<li>If a dead cell has <strong>3 living neighbours</strong> it comes to life</li>
</ul>
<p>There are many initial shapes which either form patterns of perpetual growth or at least interesting shapes as the system updates; some simply die out. Have a play and see if you can find shapes, or combinations of shapes which do interesting things. It’s quite addictive!</p>
<p>I have added a few presets to illustrate how certain groupings of cells that are alive when the system starts can behave in the grid as the automaton runs, and also a randomise button which will create a random grid of empty and alive cells and can form some interesting patterns as the system iterates and emergence begins to kick in.</p>
<p>The <a title="Actionscript 3 Cellular Automata source code" href="http://blog.soulwire.co.uk/uploads/2008/05/cellular-automata.zip">source code</a> is of course available, so have a play with that and see what happens when you change the rules or create bigger grids.</p>
<p><strong>A quick note about the Actionscript.</strong></p>
<p>I have created a <strong>CAGrid </strong>class for building Cellular Automata, which can be instantiated at any size and with any amount of rows and colums.</p>

<div class="syntax"><div class="code"><pre class="actionscript"><span style="color: #CCCCCC;">/**
* A grid of cells used to produce a 2 dimensional cellular automata
*
* @param	gridSize	The dimensions in pixels of the grid
* @param	segments	The number of cells in each row or column
* @param	cellPad		The padding (or spacing) inside each cell
*/</span>
&nbsp;
<span style="color: #1e4af8;">public</span> <span style="color: #1e4af8;">function</span> CAGrid<span style="color: #3a3a3a;">&#40;</span> gridSize<span style="color: #3a3a3a;">:</span><span style="color: #008080;">int</span>, segments<span style="color: #3a3a3a;">:</span><span style="color: #008080;">int</span>, cellPad<span style="color: #3a3a3a;">:</span><span style="color: #008080;">int</span> <span style="color: #3a3a3a;">&#41;</span></pre></div></div>

<p>The CAGrid class contains methods for drawing the grid, resetting the grid, updating the system, randomising cells, saving configurations and loading presets, and is automatically redrawn when the size or rows / columns are changed during runtime using the <strong>size </strong>and <strong>segments </strong>setters respectively.</p>
<p>The <strong>Cell </strong>class contains a simple setter for <strong>status</strong>, and some constants for easy reference to the cell&#8217;s state. In this example the cell is drawn by choosing a colour which corresponds to the state of the cell, but a movieclip with labelled frames (for example) could just as easily be used to create more visually interesting results.</p>
<p>Oh, and included are some <strong>custom skinned CS3 components</strong> (button and comboBox) which look a bit like the Vista skin, so maybe those are goodies in themselves!</p>
<p><a title="Actionscript 3 Cellular Automata source code" href="http://blog.soulwire.co.uk/uploads/2008/05/cellular-automata.zip">Download the Cellular Automata source code (AS3)<br />
</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.soulwire.co.uk/flash/actionscript-3/2d-cellular-automata/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Spring Clean</title>
		<link>http://blog.soulwire.co.uk/projects/personal/blog-redesign-2008/</link>
		<comments>http://blog.soulwire.co.uk/projects/personal/blog-redesign-2008/#comments</comments>
		<pubDate>Tue, 29 Apr 2008 16:42:14 +0000</pubDate>
		<dc:creator>Soulwire</dc:creator>
		
		<category><![CDATA[Personal]]></category>

		<category><![CDATA[interfaces]]></category>

		<category><![CDATA[projects]]></category>

		<category><![CDATA[web design]]></category>

		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://blog.soulwire.co.uk/?p=66</guid>
		<description><![CDATA[ 	If you’ve been here before, you will have noticed I have not only moved servers but also overhauled this whole site as well as giving it a swanky new look. Apart from the simple fact that change is good, I have a few key reasons for the update:

Speed
My old server was SLOW, and I [...]]]></description>
			<content:encoded><![CDATA[<p> 	If you’ve been here before, you will have noticed I have not only moved servers but also overhauled this whole site as well as giving it a swanky new look. Apart from the simple fact that change is good, I have a few key reasons for the update:<span id="more-66"></span></p>
<blockquote><p>
<strong>Speed</strong><br />
My old server was SLOW, and I apologise for that. The ridiculous thing is, it got slower and slower as time went on! Proportionally, my bounce rate went up, and so I finally decided that enough is enough. So I moved to <em>Smudge</em>, and in the UK at least everything is now running at top speed.
</p></blockquote>
<blockquote><p>
<strong>Coherence</strong><br />
As I am also in the process of rebuilding my portfolio site, I felt it was time to integrate this with my blog, daily sketchbook, client area and webmail. The later sections will be arriving soon so I’ll let you know.
</p></blockquote>
<blockquote><p>
<strong>Time</strong><br />
I’ve been a terrible blogger lately. Ironically, I have been at my most productive, but simply have not had the time to write tutorials or to clean up my experiments before sharing them with you. The plus side is, I now have several<span> </span>projects and experiments to put up here which will be appearing in a quick but intentionally staggered manner.
</p></blockquote>
<blockquote><p>
<strong>Motivation</strong><br />
I am a firm believer that change is as good as a break, and since I have had both (with respects to this blog at least) I now feel more prolific and will make sure you share in the bounty. Several old source codes need updating and refining, and as my Actionscript 3 skills have got much sharper in the last few months there will be plenty of source code appearing soon, as well as drawings and other creative projects.
</p></blockquote>
<p>On the whole, this new site is in shape, but it is still a work in progress, and so if you have any problems, suggestions or comments then <a title="Contact Soulwire" href="http://blog.soulwire.co.uk/contact/" target="_self">let me know</a> and get involved with the discussions on the posts.</p>
<p>Thanks for coming back –<strong> see you soon</strong>!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.soulwire.co.uk/projects/personal/blog-redesign-2008/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Alphabet Particles AS3</title>
		<link>http://blog.soulwire.co.uk/flash/actionscript-3/as3-alphabet-particles/</link>
		<comments>http://blog.soulwire.co.uk/flash/actionscript-3/as3-alphabet-particles/#comments</comments>
		<pubDate>Tue, 29 Apr 2008 02:22:41 +0000</pubDate>
		<dc:creator>Soulwire</dc:creator>
		
		<category><![CDATA[Actionscript 3.0]]></category>

		<category><![CDATA[actionscript 3]]></category>

		<category><![CDATA[experiments]]></category>

		<category><![CDATA[flash]]></category>

		<guid isPermaLink="false">http://blog.soulwire.co.uk/?p=60</guid>
		<description><![CDATA[ 	Download Source Code (AS3)
Ok, so there’s not much to say here!
I’m no mathematician, but I’ve been working on putting together a simple particle engine which harnesses the awesome power of Actionscript 3.
My reasons for attempting such a project are purely artistic, as a large amount of work for my next exhibition is generative, and [...]]]></description>
			<content:encoded><![CDATA[<p> 	<a title="Download the AS3 source code for the Alphabet Particles experiment" href="http://blog.soulwire.co.uk/uploads/2008/04/alphabet-particles.zip">Download Source Code (AS3)</a></p>
<p>Ok, so there’s not much to say here!<span id="more-60"></span></p>
<p>I’m no mathematician, but I’ve been working on putting together a simple particle engine which harnesses the awesome power of Actionscript 3.</p>
<p>My reasons for attempting such a project are purely artistic, as a large amount of work for my next exhibition is generative, and is made by using various rendering methods to map the movement of particles in a system. More posts relating to this will be coming up, including my solution for simulating organic lines in Flash, using a custom <em>pencilLineTo</em> method. I’m excited about this one in particular, as it means I can produce complex generative work using AS3, but maintain the appearance of hand drawn work.</p>
<p>Anyway, more on that later! For now, here is a rather cute tester for the particle engine I mentioned, using the alphabet. So it’s educational as well as fun; if you’re 2 years old and have eyes fast enough to follow the letters that is.</p>
<p>You will see in the <a title="Download the AS3 source code for the Alphabet Particles experiment" href="http://blog.soulwire.co.uk/uploads/2008/04/alphabet-particles.zip">source code</a> that certain features are there in parts, but have not been properly implemented. It’s work in progress though (no collision yet for example), but I felt like sharing it in its current state.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.soulwire.co.uk/flash/actionscript-3/as3-alphabet-particles/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Playing With APEs</title>
		<link>http://blog.soulwire.co.uk/flash/actionscript-3/ape-actionscript-3-physics-engine-experiment/</link>
		<comments>http://blog.soulwire.co.uk/flash/actionscript-3/ape-actionscript-3-physics-engine-experiment/#comments</comments>
		<pubDate>Sat, 24 Nov 2007 14:02:31 +0000</pubDate>
		<dc:creator>Soulwire</dc:creator>
		
		<category><![CDATA[Actionscript 3.0]]></category>

		<category><![CDATA[actionscript 3]]></category>

		<category><![CDATA[experiments]]></category>

		<category><![CDATA[flash]]></category>

		<guid isPermaLink="false">http://blog.soulwire.co.uk/?p=52</guid>
		<description><![CDATA[ 	Download demo source files
Look at them go! Stupid primates.
Click ‘Spawn Platforms’ for a new layout, or play with the Platform and APE count steppers!
I finally found some time to play around with the AS3 physics engine, APE; something I have been meaning to do for a while now.
This is a pretty simple demo, and [...]]]></description>
			<content:encoded><![CDATA[<p> 	<a title="Download APE source files" href="http://blog.soulwire.co.uk/uploads/2007/11/apes.zip">Download demo source files</a></p>
<p><strong>Look at them go</strong>! Stupid primates.<br />
Click ‘Spawn Platforms’ for a new layout, or play with the Platform and APE count steppers!</p>
<p>I finally found some time to play around with the <strong>AS3 physics engine</strong>, <a title="APE" href="http://www.cove.org/ape/index.htm" target="_blank">APE</a>; something I have been meaning to do for a while now.<span id="more-52"></span></p>
<p>This is a pretty simple demo, and by no means pushes APE’s capabilities; however it should help introduce you to the API, as well as explaining how to create custom Classes which subclass the <em>Group </em>class in APE. This is a very useful method, as it means that you can build, for example, Classes for bridges, bone structures, Pinball style paddles (as I have done here) and use these to create scenes. Essentially, this is just a particle engine with bouncing particles and collision detection.<br />
Though APE seems to lend itself very well to game development, I am no game developer. However, I do find the possibilities that APE holds very exciting. Here, I have used some basic artwork and added physics and collisions to it, something that could add a dimension to interactive experiments and even website interfaces. For example, it is extremely easy to use custom Sprites or MovieClips as ‘particles’ with collision, so interface buttons or images can become elements in a scene with their own mass, friction and elasticity! Cool.</p>
<p>I use <a title="FlashDevelop" href="http://www.flashdevelop.org/" target="_blank">FlashDevelop </a>for Actionscript editing nowadays (which I <strong>highly </strong>recommend), so have included the project file in the <a title="Download APE source files" href="http://blog.soulwire.co.uk/uploads/2007/11/apes.zip">source code</a>. You will also find the Platform Class in there, which will show you how to build your own groups of objects using the APE API. The document Class will show you the basics of creating particles, assigning custom sprites to them and giving them properties which are used when they interact with the environment.</p>
<p>If I have a moment, I will go back and add more functionality, but I hope this demo will at least give an outline as to the potential of APE from a more artistic than mathematical point of view. If you want to know more, you can <a title="APE Documentation" href="http://www.cove.org/ape/docs/api/" target="_blank">read the docs here</a>, and download the APE engine <a title="Download APE Engine" href="http://www.cove.org/ape/ape_a045.zip">here</a>, but be sure to visit the creator’s site and send them some fanmail.</p>
<p>Have fun with it, but go easy on the Gorillas; they’re very irritable…</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.soulwire.co.uk/flash/actionscript-3/ape-actionscript-3-physics-engine-experiment/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Flash on the Beach 07</title>
		<link>http://blog.soulwire.co.uk/flash/flash-on-the-beach-07/</link>
		<comments>http://blog.soulwire.co.uk/flash/flash-on-the-beach-07/#comments</comments>
		<pubDate>Fri, 09 Nov 2007 13:49:07 +0000</pubDate>
		<dc:creator>Soulwire</dc:creator>
		
		<category><![CDATA[flash]]></category>

		<category><![CDATA[events]]></category>

		<guid isPermaLink="false">http://blog.soulwire.co.uk/?p=50</guid>
		<description><![CDATA[ 	I just got back from Flash on the Beach 07; A Flash conference in Brighton. It would be an impossible task so sum up what a fantastic 3 days it turned out to be, suffice to say the speaker line-up was near perfect, and I left feeling inspired to play more, create more and [...]]]></description>
			<content:encoded><![CDATA[<p> 	I just got back from <a title="Flash on the Beach 07" href="http://www.flashonthebeach.com/" target="_blank"><strong>Flash on the Beach 07</strong></a>; A Flash conference in Brighton. It would be an impossible task so sum up what a fantastic 3 days it turned out to be, suffice to say the speaker line-up was near perfect, and I left feeling inspired to play more, create more and dig out some of those old ideas from the back of my hard drive and see where they take me.<span id="more-50"></span></p>
<p>Having never been before, I thought I was in for an educational but dry few days of indulgent nerdiness; however I was proved very wrong. FOTB had its fair share of inside tips from Adobe and technical tutorials, but also a lot of inspirational talks which encompassed Flash but that were really more generalised observations about creativity, industry, art and computer science.</p>
<p>For me, the highlights were definitely <a title="Joshua Davis" href="http://www.joshuadavis.com/" target="_blank">Joshua Davis</a> and <a title="Robert Hodgin" href="http://www.flight404.com/blog/" target="_blank">Robert Hodgin</a>, who are both masters and push any software they use to its creative limits.</p>
<p>If you didn’t go, make sure you book a ticket next year and I’ll see you there.</p>
<p><a title="Flash on the Beach 2008" href="http://www.flashonthebeach.com/" target="_blank">www.flashonthebeach.com </a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.soulwire.co.uk/flash/flash-on-the-beach-07/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Webcam Glitch Art</title>
		<link>http://blog.soulwire.co.uk/art/webcam-glitch-art/</link>
		<comments>http://blog.soulwire.co.uk/art/webcam-glitch-art/#comments</comments>
		<pubDate>Fri, 09 Nov 2007 13:13:36 +0000</pubDate>
		<dc:creator>Soulwire</dc:creator>
		
		<category><![CDATA[art]]></category>

		<category><![CDATA[curiosities]]></category>

		<category><![CDATA[experiments]]></category>

		<guid isPermaLink="false">http://blog.soulwire.co.uk/?p=47</guid>
		<description><![CDATA[ 	
What happens when you let vista install drivers for you? Shit happens. But in this case, good shit.
I was playing around with flash and using the Camera class to save stills via the CS3 AIR extension. Unfortunately, my webcam drivers had not been installed correctly, but the results were some really interesting glitches.

You can [...]]]></description>
			<content:encoded><![CDATA[<p> 	<img title="Webcam Glitch" src="http://blog.soulwire.co.uk/uploads/2008/04/webcam-glitch.jpg" alt="Webcam Glitch" /></p>
<p>What happens when you let vista install drivers for you? Shit happens. But in this case, good shit.<span id="more-47"></span></p>
<p>I was playing around with flash and using the Camera class to save stills via the CS3 AIR extension. Unfortunately, my webcam drivers had not been installed correctly, but the results were some really interesting glitches.</p>
<div class="gallery"><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/01.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_01.jpg" alt="" title="" /></a><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/02.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_02.jpg" alt="" title="" /></a><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/03.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_03.jpg" alt="" title="" /></a><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/04.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_04.jpg" alt="" title="" /></a><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/05.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_05.jpg" alt="" title="" /></a><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/06.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_06.jpg" alt="" title="" /></a><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/07.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_07.jpg" alt="" title="" /></a><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/08.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_08.jpg" alt="" title="" /></a><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/09.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_09.jpg" alt="" title="" /></a><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/10.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_10.jpg" alt="" title="" /></a><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/11.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_11.jpg" alt="" title="" /></a><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/12.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_12.jpg" alt="" title="" /></a><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/13.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_13.jpg" alt="" title="" /></a><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/14.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_14.jpg" alt="" title="" /></a><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/15.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_15.jpg" alt="" title="" /></a><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/16.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_16.jpg" alt="" title="" /></a><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/17.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_17.jpg" alt="" title="" /></a><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/18.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_18.jpg" alt="" title="" /></a><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/19.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_19.jpg" alt="" title="" /></a><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/20.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_20.jpg" alt="" title="" /></a><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/21.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_21.jpg" alt="" title="" /></a><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/22.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_22.jpg" alt="" title="" /></a><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/23.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_23.jpg" alt="" title="" /></a><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/25.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_25.jpg" alt="" title="" /></a><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/26.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_26.jpg" alt="" title="" /></a><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/27.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_27.jpg" alt="" title="" /></a><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/28.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_28.jpg" alt="" title="" /></a><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/29.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_29.jpg" alt="" title="" /></a><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/30.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_30.jpg" alt="" title="" /></a><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/31.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_31.jpg" alt="" title="" /></a><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/32.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_32.jpg" alt="" title="" /></a><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/33.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_33.jpg" alt="" title="" /></a><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/34.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_34.jpg" alt="" title="" /></a><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/35.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_35.jpg" alt="" title="" /></a><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/36.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_36.jpg" alt="" title="" /></a><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/37.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_37.jpg" alt="" title="" /></a><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/38.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_38.jpg" alt="" title="" /></a><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/39.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_39.jpg" alt="" title="" /></a><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/40.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_40.jpg" alt="" title="" /></a><a rel="lightbox[webcam-glitch]" href="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/41.jpg"  title=" "><img  width="100" height="77" src="http://blog.soulwire.co.uk/uploads/images/webcam-glitch/tumbs/tmb_41.jpg" alt="" title="" /></a></div>
<p>You can see the full set and high res versions on <a title="Webcam Glitch Art" href="http://www.flickr.com/photos/soulwire/sets/72157603055370065/" target="_blank">Flickr</a></p>
<p>It got me thinking about the ByteArray and socket classes in AS3, with some experimentation, maybe there will be a way to screw up BitmapData in a similar way? Bring back the 90’s and the cool glitch art that seemed to be coming out more often then. It’s amazing what eye candy can be produced by malfunctions.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.soulwire.co.uk/art/webcam-glitch-art/feed/</wfw:commentRss>
		</item>
		<item>
		<title>AS3 Group94 Menu</title>
		<link>http://blog.soulwire.co.uk/flash/actionscript-3/as3-group94-style-scrolling-menu/</link>
		<comments>http://blog.soulwire.co.uk/flash/actionscript-3/as3-group94-style-scrolling-menu/#comments</comments>
		<pubDate>Wed, 24 Oct 2007 12:46:03 +0000</pubDate>
		<dc:creator>Soulwire</dc:creator>
		
		<category><![CDATA[Actionscript 3.0]]></category>

		<category><![CDATA[Interfaces]]></category>

		<category><![CDATA[actionscript 3]]></category>

		<category><![CDATA[flash]]></category>

		<category><![CDATA[interfaces]]></category>

		<guid isPermaLink="false">http://blog.soulwire.co.uk/?p=45</guid>
		<description><![CDATA[ 	Download source (AS3)
Welcome to the latest instalment of the Group 94 style scrolling menu tutorial! (With downloadable source files of course)
I have been very busy lately, and haven’t had a chance to share much code. I have been learning AS3 and have to say that I love it! It is much easier to adhere [...]]]></description>
			<content:encoded><![CDATA[<p> 	<a title="Download AS3 Group 94 style scrolling menu FLA source code" href="http://blog.soulwire.co.uk/uploads/2007/10/soulwire-g94as3.zip">Download source (AS3)</a></p>
<p>Welcome to the latest instalment of the Group 94 style scrolling menu tutorial! (With <a title="Download AS3 Group 94 style scrolling menu FLA source code" href="http://blog.soulwire.co.uk/uploads/2007/10/soulwire-g94as3.zip">downloadable source files</a> of course)<span id="more-45"></span></p>
<p>I have been very busy lately, and haven’t had a chance to share much code. I have been learning AS3 and have to say that I love it! It is much easier to adhere to OOP principles and building class based applications has many advantages.</p>
<p>Anyway, I received an email today from Adriaan, who was wondering how to convert the <a title="Group 94 scrolling list menu" href="http://blog.soulwire.co.uk/flash/actionscript-2/prototypes/group94-flash-scrolling-menu-list/">Group94 scrolling list</a> into a menu system, with rollovers and click functions. I hacked the old source to do this, but thought it would be a good opportunity to revisit the ‘offset scroll’ idea within the contexts of a fully functional scrolling menu.</p>
<p>So here it is. I have built it into a simple class, which means you need to do very little to get it working  :)</p>
<p>The class is very flexible, and you can assign functions and parameters to each menu item that you add. This can mean calling the same function with different parameters, or entirely different functions for each item.</p>
<p>Adding menu items is as brilliantly simple as <strong>newMenuItem(<em>label</em>, <em>function</em>, <em>parameters</em>)</strong></p>
<p>You can <a title="Download AS3 Group 94 style scrolling menu FLA source code" href="http://blog.soulwire.co.uk/uploads/2007/10/soulwire-g94as3.zip">download the source code</a> and pick it apart all you like. However, here is a quick explanation of how to use the G94Menu class.</p>
<p>Firstly we import the classes:</p>

<div class="syntax"><div class="code"><pre class="actionscript"><span style="color: #1e4af8;">import</span> com.soulwire.g94menu.G94Menu;
<span style="color: #1e4af8;">import</span> com.soulwire.g94menu.MenuItem;</pre></div></div>

<p><em>MenuItem</em><strong> </strong>is linked to a movieClip in you library, so you can use <strong><em>any style of menu item you like</em></strong>.</p>
<p>Now, we create a new instance of the G94Menu class and add it to the stage.</p>

<div class="syntax"><div class="code"><pre class="actionscript">exampleMenu = <span style="color: #1e4af8;">new</span> G94Menu<span style="color: #3a3a3a;">&#40;</span><span style="color: #000099;">3</span>, <span style="color: #000099;">1</span>, <span style="color: #000099;">25</span><span style="color: #3a3a3a;">&#41;</span>;
<span style="color: #008080;">addChild</span><span style="color: #3a3a3a;">&#40;</span>exampleMenu<span style="color: #3a3a3a;">&#41;</span>;</pre></div></div>

<p>The parameters the class constructor requires are:</p>
<ul>
<li><strong>Visible items</strong>: The amount of items visible at one time<strong></strong></li>
<li><strong>Item spacing</strong>: The gap between each item<strong></strong></li>
<li><strong>Item offset</strong>: How far the items scroll up or down as they fly off to the top or bottom</li>
</ul>
<p>Then we simply add as many items as we want using the <em>new MenuItem</em> constructor, for example:</p>

<div class="syntax"><div class="code"><pre class="actionscript">myMenu.addItem<span style="color: #3a3a3a;">&#40;</span><span style="color: #1e4af8;">new</span> MenuItem<span style="color: #3a3a3a;">&#40;</span><span style="color: #01B101;">'Text'</span>, func, <span style="color: #3a3a3a;">&#123;</span> params <span style="color: #3a3a3a;">&#125;</span> <span style="color: #3a3a3a;">&#41;</span><span style="color: #3a3a3a;">&#41;</span></pre></div></div>

<p>Here is a breakdown of the parameters you pass to the <em>MenuItem </em>constructor inside the<em> addItem </em>method:</p>
<ul>
<li><strong>Item label</strong>: A text string which will be the visible label of the item</li>
<li><strong>Function</strong>: This is optional, but if present will make the item a clickable button, executing this function when clicked.</li>
<li><strong>Parameters</strong>: This is an object containing as many parameters as you need. Again, this parameter is optional, and only needed if you have passed a function and it requires parameters.</li>
</ul>
<p>Now we create a function that will be called when a menu item is clicked:</p>

<div class="syntax"><div class="code"><pre class="actionscript"><span style="color: #1e4af8;">function</span> someFunction <span style="color: #3a3a3a;">&#40;</span>e<span style="color: #3a3a3a;">:</span><span style="color: #008080;">MouseEvent</span><span style="color: #3a3a3a;">&#41;</span>
<span style="color: #3a3a3a;">&#123;</span>
	<span style="color: #1e4af8;">if</span><span style="color: #3a3a3a;">&#40;</span>e.<span style="color: #008080;">currentTarget</span>.params <span style="color: #3a3a3a;">!</span>= <span style="color: #1e4af8;">null</span><span style="color: #3a3a3a;">&#41;</span>
	<span style="color: #3a3a3a;">&#123;</span>
		<span style="color: #1e4af8;">var</span> <span style="color: #008080;">info</span><span style="color: #3a3a3a;">:</span><span style="color: #008080;">Object</span> = e.<span style="color: #008080;">currentTarget</span>.params;
		<span style="color: #008080;">trace</span><span style="color: #3a3a3a;">&#40;</span><span style="color: #008080;">info</span>.page<span style="color: #3a3a3a;">&#41;</span>;
	<span style="color: #3a3a3a;">&#125;</span>
<span style="color: #3a3a3a;">&#125;</span></pre></div></div>

<p>In this example, we check that the parameters are not null, then access the parameters object using <em>e.currentTarget.params</em>. If your function will open a link (for example), and you pass a URL identified in the parameters object as <em>pageLink</em>, then you can use this by calling <em>e.currentTarget.params.pageLink</em>.</p>
<p>Lastly, to listen for mouse clicks on the scroll arrows, and to enable the <strong>mouse wheel</strong>, both of which will scroll our menu up or down, we add some event listeners:</p>

<div class="syntax"><div class="code"><pre class="actionscript"><span style="color: #1e4af8;">function</span> enableScrolling<span style="color: #3a3a3a;">&#40;</span><span style="color: #3a3a3a;">&#41;</span><span style="color: #3a3a3a;">:</span><span style="color: #1e4af8;">void</span>
<span style="color: #3a3a3a;">&#123;</span>
	btnUp.<span style="color: #008080;">buttonMode</span> = btnDown.<span style="color: #008080;">buttonMode</span> = <span style="color: #1e4af8;">true</span>;
	btnUp.<span style="color: #008080;">addEventListener</span><span style="color: #3a3a3a;">&#40;</span><span style="color: #008080;">MouseEvent</span>.<span style="color: #1e4af8;">CLICK</span>, exampleMenu.scrollUp<span style="color: #3a3a3a;">&#41;</span>;
	btnDown.<span style="color: #008080;">addEventListener</span><span style="color: #3a3a3a;">&#40;</span><span style="color: #008080;">MouseEvent</span>.<span style="color: #1e4af8;">CLICK</span>, exampleMenu.scrollDown<span style="color: #3a3a3a;">&#41;</span>;
	<span style="color: #008080;">stage</span>.<span style="color: #008080;">addEventListener</span><span style="color: #3a3a3a;">&#40;</span><span style="color: #008080;">MouseEvent</span>.<span style="color: #1e4af8;">MOUSE_WHEEL</span>, onMouseWheel<span style="color: #3a3a3a;">&#41;</span>;
<span style="color: #3a3a3a;">&#125;</span>
&nbsp;
<span style="color: #1e4af8;">function</span> onMouseWheel<span style="color: #3a3a3a;">&#40;</span>e<span style="color: #3a3a3a;">:</span><span style="color: #008080;">MouseEvent</span><span style="color: #3a3a3a;">&#41;</span><span style="color: #3a3a3a;">:</span><span style="color: #1e4af8;">void</span>
<span style="color: #3a3a3a;">&#123;</span>
	e.<span style="color: #008080;">delta</span> <span style="color: #3a3a3a;">&amp;</span>lt;<span style="color: #000099;">0</span> <span style="color: #3a3a3a;">?</span> exampleMenu.scrollDown<span style="color: #3a3a3a;">&#40;</span><span style="color: #3a3a3a;">&#41;</span> <span style="color: #3a3a3a;">:</span> exampleMenu.scrollUp<span style="color: #3a3a3a;">&#40;</span><span style="color: #3a3a3a;">&#41;</span>;
<span style="color: #3a3a3a;">&#125;</span></pre></div></div>

<p>The <em><strong>scrollUp</strong></em> and <em><strong>scrollDown</strong></em> methods can be called whenever you like (i.e. remotely) on any instance of the G94Menu class.</p>
<p>Once again, I really hope this is useful, even if it is just a simple introduction to <a title="Actionscript 3.0" href="http://blog.soulwire.co.uk/category/flash/as3/">Actionscript 3</a> and writing classes.</p>
<p>Thanks to Adriaan and all of you who have been commenting for inspiring me to update this example.</p>
<p>If anyone wants to use this in older projects, and needs an AS2 version, please let me know and I’ll convert it when I get the time.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.soulwire.co.uk/flash/actionscript-3/as3-group94-style-scrolling-menu/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Disabed Algebra</title>
		<link>http://blog.soulwire.co.uk/projects/personal/disabed-algebra/</link>
		<comments>http://blog.soulwire.co.uk/projects/personal/disabed-algebra/#comments</comments>
		<pubDate>Tue, 07 Aug 2007 18:52:13 +0000</pubDate>
		<dc:creator>Soulwire</dc:creator>
		
		<category><![CDATA[Personal]]></category>

		<category><![CDATA[music]]></category>

		<category><![CDATA[projects]]></category>

		<guid isPermaLink="false">http://blog.soulwire.co.uk/?p=63</guid>
		<description><![CDATA[ 	Screenshot taken from Sharing My Pigeonhole 
Disabled Algebra is a showcase for the incredible music of Jason kerley, aka Blackpepper.
It was also my first venture into Actionscript 3.0, using the computeSpectrum function to visualise streaming audio.
Disabled Algebra is build around a 3D engine I put together, which uses Fuse to tween the camera in [...]]]></description>
			<content:encoded><![CDATA[<p> 	<em>Screenshot taken from <a title="Music Visualisation to Sharing my Pigeonhole by Blackpepper" href="http://www.disabled-algebra.co.uk/sharing_my_pigeon_hole.html" target="_blank">Sharing My Pigeonhole</a> </em></p>
<p><strong>Disabled Algebra</strong> is a showcase for the incredible music of <strong>Jason kerley</strong>, aka <strong>Blackpepper</strong>.<span id="more-63"></span></p>
<p>It was also my first venture into Actionscript 3.0, using the computeSpectrum function to visualise streaming audio.</p>
<p>Disabled Algebra is build around a 3D engine I put together, which uses Fuse to tween the camera in 3D space. There are also four distinctive music visualisations, one for each track on one disc of the release.</p>
<p>All visualisations are dynamic, and some interactive also, so play with the mouse. They utilise a basic Actionscript 3 mp3 player I built to stream the music, and the user can scrub through the track with the visualisation reacting as they do so.</p>
<p>Check out some <a title="Actionscript 3.0 sound and music visualisations" href="http://www.disabled-algebra.co.uk/" target="_blank">Actionscript 3.0 sound visualisations</a> on <a title="Blackpepper - Disabled Algebra" href="http://www.disabled-algebra.co.uk/">www.disabled-algebra.co.uk.</a></p>
<p>You can buy Blackpepper’s music from <a title="Buy Blackpepper's music now" href="http://www.dirtydemos.co.uk/" target="_blank">Dirty Demos</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.soulwire.co.uk/projects/personal/disabed-algebra/feed/</wfw:commentRss>
		</item>
		<item>
		<title>G94 Circular Menu</title>
		<link>http://blog.soulwire.co.uk/flash/actionscript-2/prototypes/circular-group94-scrolling-flash-menu/</link>
		<comments>http://blog.soulwire.co.uk/flash/actionscript-2/prototypes/circular-group94-scrolling-flash-menu/#comments</comments>
		<pubDate>Tue, 07 Aug 2007 11:54:16 +0000</pubDate>
		<dc:creator>Soulwire</dc:creator>
		
		<category><![CDATA[Interfaces]]></category>

		<category><![CDATA[prototypes]]></category>

		<category><![CDATA[Actionscript 2.0]]></category>

		<category><![CDATA[interfaces]]></category>

		<category><![CDATA[web design]]></category>

		<guid isPermaLink="false">http://blog.soulwire.co.uk/?p=42</guid>
		<description><![CDATA[ 	Download Group94 style scrolling menu
I built this circular version of the group94 style scrolling menu for a flash website awards showcase I was asked to work on. The original design was based around circles, but we ended up redesigning as parts of the interface (not this menu!) were too processor intensive.
Ok, so part two [...]]]></description>
			<content:encoded><![CDATA[<p> 	<a id="p65" href="http://blog.soulwire.co.uk/uploads/2007/08/soulwire-circ-nav.zip">Download Group94 style scrolling menu</a></p>
<p>I built this circular version of the <a title="Group 94 style scrolling menu system in Flash" href="http://blog.soulwire.co.uk/flash/actionscript-2/prototypes/group94-flash-scrolling-menu-list/">group94 style scrolling menu</a> for a flash website awards showcase I was asked to work on. The original design was based around circles, but we ended up redesigning as parts of the interface (not this menu!) were too processor intensive.</p>
<p>Ok, so part two of my tribute to Group 94’s menu system! This is again inspired by the Group 94 (at least they are most famous for it) shuffle menu in Flash, which pushes items off the top and bottom as the menu shuffles into place.<span id="more-42"></span></p>
<p>This version is circular though, and each menu item rotates around a pivot. Initiating the prototype with particular variables will define the spacing between items, the radius of the Group 94 circular menu and the amount of items visible at one time.</p>
<p>Please note, this is in no way a rip of the Group 94 menu. In fact, I haven’t even seen a circular version which is why I made it. I have no idea how Group 94’s actionscript looks, or how they would have approached this style of menu. I do know however, that they have produced many innovative navigation systems, and so this is a simple tribute to their talent and innovation.</p>
<p>As with the regular <a title="Group 94 menu actionscript" href="http://blog.soulwire.co.uk/flash/actionscript-2/prototypes/group94-flash-scrolling-menu-list/">group 94 scrolling menu</a>, you will need <a title="Fuse Kit" href="http://www.mosessupposes.com/Fuse/" target="_blank">Fuse</a> installed, though all it does is handle tweening so you could use <a title="Tweener" href="http://www.osflash.org/tweener" target="_blank">tweener</a> or the inbuilt Flash tweening functions. I just prefer Fuse!</p>
<p><strong>How it is done.</strong></p>
<p>First import Fuse for tweening, then setup the array we will use for the menu:</p>

<div class="syntax"><div class="code"><pre class="actionscript"><span style="color: #1e4af8;">import</span> com.mosesSupposes.fuse.<span style="color: #3a3a3a;">*</span>;
ZigoEngine.simpleSetup <span style="color: #3a3a3a;">&#40;</span>Shortcuts,PennerEasing<span style="color: #3a3a3a;">&#41;</span>;
&nbsp;
<span style="color: #1e4af8;">var</span> planets<span style="color: #3a3a3a;">:</span><span style="color: #008080;">Array</span> = <span style="color: #1e4af8;">new</span> <span style="color: #008080;">Array</span> <span style="color: #3a3a3a;">&#40;</span><span style="color: #3a3a3a;">&#41;</span>;
planets.<span style="color: #008080;">push</span> <span style="color: #3a3a3a;">&#40;</span><span style="color: #01B101;">&quot;Mercury&quot;</span><span style="color: #3a3a3a;">&#41;</span>;
planets.<span style="color: #008080;">push</span> <span style="color: #3a3a3a;">&#40;</span><span style="color: #01B101;">&quot;Venus&quot;</span><span style="color: #3a3a3a;">&#41;</span>;
planets.<span style="color: #008080;">push</span> <span style="color: #3a3a3a;">&#40;</span><span style="color: #01B101;">&quot;Earth&quot;</span><span style="color: #3a3a3a;">&#41;</span>;
planets.<span style="color: #008080;">push</span> <span style="color: #3a3a3a;">&#40;</span><span style="color: #01B101;">&quot;Mars&quot;</span><span style="color: #3a3a3a;">&#41;</span>;
planets.<span style="color: #008080;">push</span> <span style="color: #3a3a3a;">&#40;</span><span style="color: #01B101;">&quot;Jupiter&quot;</span><span style="color: #3a3a3a;">&#41;</span>;
planets.<span style="color: #008080;">push</span> <span style="color: #3a3a3a;">&#40;</span><span style="color: #01B101;">&quot;Saturn&quot;</span><span style="color: #3a3a3a;">&#41;</span>;
planets.<span style="color: #008080;">push</span> <span style="color: #3a3a3a;">&#40;</span><span style="color: #01B101;">&quot;Uranus&quot;</span><span style="color: #3a3a3a;">&#41;</span>;
planets.<span style="color: #008080;">push</span> <span style="color: #3a3a3a;">&#40;</span><span style="color: #01B101;">&quot;Neptune&quot;</span><span style="color: #3a3a3a;">&#41;</span>;
planets.<span style="color: #008080;">push</span> <span style="color: #3a3a3a;">&#40;</span><span style="color: #01B101;">&quot;Pluto&quot;</span><span style="color: #3a3a3a;">&#41;</span>;</pre></div></div>

<p>Then some very basic functionality for each menu button. I have ommited rollOvers for the demo&#8230;</p>

<div class="syntax"><div class="code"><pre class="actionscript"><span style="color: #008080;">MovieClip</span>.<span style="color: #008080;">prototype</span>.circNavBtn = <span style="color: #1e4af8;">function</span> <span style="color: #3a3a3a;">&#40;</span>id<span style="color: #3a3a3a;">:</span><span style="color: #008080;">Number</span>, par<span style="color: #3a3a3a;">:</span><span style="color: #008080;">MovieClip</span>, <span style="color: #008080;">name</span><span style="color: #3a3a3a;">:</span><span style="color: #008080;">String</span><span style="color: #3a3a3a;">&#41;</span>
<span style="color: #3a3a3a;">&#123;</span>
	<span style="color: #1e4af8;">this</span>.pos = <span style="color: #1e4af8;">this</span>.id = id;
	<span style="color: #1e4af8;">this</span>.par = par;
	<span style="color: #1e4af8;">this</span>.btn.txt.<span style="color: #008080;">text</span> = <span style="color: #008080;">name</span>.<span style="color: #008080;">toUpperCase</span> <span style="color: #3a3a3a;">&#40;</span><span style="color: #3a3a3a;">&#41;</span>;
&nbsp;
	<span style="color: #1e4af8;">this</span>._rotation = <span style="color: #000099;">90</span>;
	<span style="color: #1e4af8;">this</span>._alpha = <span style="color: #000099;">0</span>;
&nbsp;
	<span style="color: #1e4af8;">this</span>.onPress = <span style="color: #1e4af8;">function</span> <span style="color: #3a3a3a;">&#40;</span><span style="color: #3a3a3a;">&#41;</span>
	<span style="color: #3a3a3a;">&#123;</span>
		<span style="color: #1e4af8;">this</span>.par.circNavRot <span style="color: #3a3a3a;">&#40;</span><span style="color: #1e4af8;">this</span>.pos<span style="color: #3a3a3a;">&#41;</span>;
		<span style="color: #1e4af8;">this</span>.activeBtn <span style="color: #3a3a3a;">&#40;</span><span style="color: #3a3a3a;">&#41;</span>;
	<span style="color: #3a3a3a;">&#125;</span>;
<span style="color: #3a3a3a;">&#125;</span>;</pre></div></div>

<p>Then two small prototypes to handle the activation and de-activation of the buttons when the scroll function is called:</p>

<div class="syntax"><div class="code"><pre class="actionscript"><span style="color: #008080;">MovieClip</span>.<span style="color: #008080;">prototype</span>.activeBtn = <span style="color: #1e4af8;">function</span> <span style="color: #3a3a3a;">&#40;</span><span style="color: #3a3a3a;">&#41;</span>
<span style="color: #3a3a3a;">&#123;</span>
	activeNavBtn.inactiveBtn <span style="color: #3a3a3a;">&#40;</span><span style="color: #3a3a3a;">&#41;</span>;
	activeNavBtn = <span style="color: #1e4af8;">this</span>;
&nbsp;
	<span style="color: #1e4af8;">this</span>.btn.scaleTo <span style="color: #3a3a3a;">&#40;</span><span style="color: #000099;">200</span>,<span style="color: #000099;">0.5</span><span style="color: #3a3a3a;">&#41;</span>;
&nbsp;
	<span style="color: #1e4af8;">this</span>.<span style="color: #008080;">enabled</span> = <span style="color: #1e4af8;">false</span>;
<span style="color: #3a3a3a;">&#125;</span>;
&nbsp;
<span style="color: #008080;">MovieClip</span>.<span style="color: #008080;">prototype</span>.inactiveBtn = <span style="color: #1e4af8;">function</span> <span style="color: #3a3a3a;">&#40;</span><span style="color: #3a3a3a;">&#41;</span>
<span style="color: #3a3a3a;">&#123;</span>
	<span style="color: #1e4af8;">this</span>.btn.scaleTo <span style="color: #3a3a3a;">&#40;</span><span style="color: #000099;">100</span>,<span style="color: #000099;">0.5</span><span style="color: #3a3a3a;">&#41;</span>;
<span style="color: #3a3a3a;">&#125;</span>;</pre></div></div>

<p>Then the main shuffle or rotation function, which designates tweens to all visible movieClips and hides those outside of the visible items range.</p>

<div class="syntax"><div class="code"><pre class="actionscript"><span style="color: #008080;">MovieClip</span>.<span style="color: #008080;">prototype</span>.circNavRot = <span style="color: #1e4af8;">function</span> <span style="color: #3a3a3a;">&#40;</span>num<span style="color: #3a3a3a;">:</span><span style="color: #008080;">Number</span><span style="color: #3a3a3a;">&#41;</span>
<span style="color: #3a3a3a;">&#123;</span>
	<span style="color: #1e4af8;">var</span> diff<span style="color: #3a3a3a;">:</span><span style="color: #008080;">Number</span> = num;
&nbsp;
	<span style="color: #1e4af8;">for</span> <span style="color: #3a3a3a;">&#40;</span><span style="color: #1e4af8;">var</span> i<span style="color: #3a3a3a;">:</span><span style="color: #008080;">Number</span> = <span style="color: #000099;">0</span>; i <span style="color: #3a3a3a;">&amp;</span>lt; <span style="color: #1e4af8;">this</span>.btns.<span style="color: #008080;">length</span>; i<span style="color: #3a3a3a;">++</span><span style="color: #3a3a3a;">&#41;</span>
	<span style="color: #3a3a3a;">&#123;</span>
		<span style="color: #1e4af8;">var</span> btn<span style="color: #3a3a3a;">:</span><span style="color: #008080;">MovieClip</span> = <span style="color: #1e4af8;">this</span><span style="color: #3a3a3a;">&#91;</span><span style="color: #01B101;">&quot;navBtn&quot;</span> <span style="color: #3a3a3a;">+</span> i<span style="color: #3a3a3a;">&#93;</span>;
&nbsp;
		btn.pos <span style="color: #3a3a3a;">-</span>= diff;
&nbsp;
		<span style="color: #1e4af8;">if</span> <span style="color: #3a3a3a;">&#40;</span><span style="color: #008080;">Math</span>.<span style="color: #008080;">abs</span> <span style="color: #3a3a3a;">&#40;</span>btn.pos<span style="color: #3a3a3a;">&#41;</span> <span style="color: #3a3a3a;">&amp;</span>lt; <span style="color: #1e4af8;">this</span>.visItems<span style="color: #3a3a3a;">&#41;</span>
		<span style="color: #3a3a3a;">&#123;</span>
			<span style="color: #1e4af8;">var</span> <span style="color: #008080;">offset</span><span style="color: #3a3a3a;">:</span><span style="color: #008080;">Number</span>;
			btn.pos <span style="color: #3a3a3a;">!</span>= <span style="color: #000099;">0</span> <span style="color: #3a3a3a;">?</span> <span style="color: #3a3a3a;">&#40;</span><span style="color: #008080;">offset</span> = btn.pos <span style="color: #3a3a3a;">&amp;</span>gt; <span style="color: #000099;">0</span> <span style="color: #3a3a3a;">?</span> <span style="color: #000099;">15</span> <span style="color: #3a3a3a;">:</span> <span style="color: #000099;">-15</span><span style="color: #3a3a3a;">&#41;</span> <span style="color: #3a3a3a;">:</span> <span style="color: #008080;">offset</span> = <span style="color: #000099;">0</span>;
&nbsp;
			<span style="color: #1e4af8;">var</span> rot<span style="color: #3a3a3a;">:</span><span style="color: #008080;">Number</span> = <span style="color: #008080;">offset</span> <span style="color: #3a3a3a;">+</span> <span style="color: #3a3a3a;">&#40;</span><span style="color: #1e4af8;">this</span>.spacing <span style="color: #3a3a3a;">*</span> btn.pos<span style="color: #3a3a3a;">&#41;</span>;
			<span style="color: #1e4af8;">var</span> alph<span style="color: #3a3a3a;">:</span><span style="color: #008080;">Number</span> = <span style="color: #000099;">100</span> <span style="color: #3a3a3a;">-</span> <span style="color: #3a3a3a;">&#40;</span><span style="color: #3a3a3a;">&#40;</span><span style="color: #000099;">100</span> <span style="color: #3a3a3a;">/</span> <span style="color: #1e4af8;">this</span>.visItems<span style="color: #3a3a3a;">&#41;</span> <span style="color: #3a3a3a;">*</span> <span style="color: #008080;">Math</span>.<span style="color: #008080;">abs</span> <span style="color: #3a3a3a;">&#40;</span>btn.pos<span style="color: #3a3a3a;">&#41;</span><span style="color: #3a3a3a;">&#41;</span>;
			<span style="color: #1e4af8;">var</span> scl<span style="color: #3a3a3a;">:</span><span style="color: #008080;">Number</span> = <span style="color: #000099;">100</span> <span style="color: #3a3a3a;">-</span> <span style="color: #3a3a3a;">&#40;</span><span style="color: #000099;">5</span> <span style="color: #3a3a3a;">*</span> <span style="color: #008080;">Math</span>.<span style="color: #008080;">abs</span> <span style="color: #3a3a3a;">&#40;</span>btn.pos<span style="color: #3a3a3a;">&#41;</span><span style="color: #3a3a3a;">&#41;</span>;
&nbsp;
			btn.rotateTo <span style="color: #3a3a3a;">&#40;</span>rot,<span style="color: #000099;">0.5</span>,<span style="color: #01B101;">&quot;easeOutExpo&quot;</span><span style="color: #3a3a3a;">&#41;</span>;
			btn.alphaTo <span style="color: #3a3a3a;">&#40;</span>alph,<span style="color: #000099;">0.5</span><span style="color: #3a3a3a;">&#41;</span>;
			btn.btn.scaleTo <span style="color: #3a3a3a;">&#40;</span>scl,<span style="color: #000099;">0.5</span><span style="color: #3a3a3a;">&#41;</span>;
		<span style="color: #3a3a3a;">&#125;</span>
		<span style="color: #1e4af8;">else</span>
		<span style="color: #3a3a3a;">&#123;</span>
			btn.stopTween <span style="color: #3a3a3a;">&#40;</span><span style="color: #01B101;">&quot;_alpha&quot;</span><span style="color: #3a3a3a;">&#41;</span>;
			btn.stopTween <span style="color: #3a3a3a;">&#40;</span><span style="color: #01B101;">&quot;_rotation&quot;</span><span style="color: #3a3a3a;">&#41;</span>;
			btn._rotation = btn.pos <span style="color: #3a3a3a;">&amp;</span>gt; <span style="color: #000099;">0</span> <span style="color: #3a3a3a;">?</span> <span style="color: #000099;">90</span> <span style="color: #3a3a3a;">:</span> <span style="color: #000099;">-90</span>;
			btn._alpha = <span style="color: #000099;">0</span>;
		<span style="color: #3a3a3a;">&#125;</span>
&nbsp;
		btn.<span style="color: #008080;">enabled</span> = <span style="color: #008080;">Math</span>.<span style="color: #008080;">abs</span> <span style="color: #3a3a3a;">&#40;</span>btn.pos<span style="color: #3a3a3a;">&#41;</span> <span style="color: #3a3a3a;">&amp;</span>lt; <span style="color: #1e4af8;">this</span>.visItems;
	<span style="color: #3a3a3a;">&#125;</span>
	<span style="color: #1e4af8;">this</span><span style="color: #3a3a3a;">&#91;</span><span style="color: #01B101;">&quot;navBtn&quot;</span> <span style="color: #3a3a3a;">+</span> num<span style="color: #3a3a3a;">&#93;</span>.activeBtn <span style="color: #3a3a3a;">&#40;</span><span style="color: #3a3a3a;">&#41;</span>;
<span style="color: #3a3a3a;">&#125;</span>;</pre></div></div>

<p>Now we setup the circular scrolling menu on a movieClip:</p>

<div class="syntax"><div class="code"><pre class="actionscript"><span style="color: #008080;">MovieClip</span>.<span style="color: #008080;">prototype</span>.circNav = <span style="color: #1e4af8;">function</span> <span style="color: #3a3a3a;">&#40;</span>array<span style="color: #3a3a3a;">:</span><span style="color: #008080;">Array</span>, radius<span style="color: #3a3a3a;">:</span><span style="color: #008080;">Number</span>, spacing<span style="color: #3a3a3a;">:</span><span style="color: #008080;">Number</span>, visItems<span style="color: #3a3a3a;">:</span><span style="color: #008080;">Number</span><span style="color: #3a3a3a;">&#41;</span>
<span style="color: #3a3a3a;">&#123;</span>
	<span style="color: #1e4af8;">this</span>.btns = <span style="color: #1e4af8;">new</span> <span style="color: #008080;">Array</span> <span style="color: #3a3a3a;">&#40;</span><span style="color: #3a3a3a;">&#41;</span>;
	<span style="color: #1e4af8;">this</span>.spacing = spacing;
	<span style="color: #1e4af8;">this</span>.visItems = visItems;
&nbsp;
	<span style="color: #1e4af8;">for</span> <span style="color: #3a3a3a;">&#40;</span><span style="color: #1e4af8;">var</span> i<span style="color: #3a3a3a;">:</span><span style="color: #008080;">Number</span> = <span style="color: #000099;">0</span>; i <span style="color: #3a3a3a;">&amp;</span>lt; array.<span style="color: #008080;">length</span>; i<span style="color: #3a3a3a;">++</span><span style="color: #3a3a3a;">&#41;</span>
	<span style="color: #3a3a3a;">&#123;</span>
		<span style="color: #1e4af8;">var</span> navBtn<span style="color: #3a3a3a;">:</span><span style="color: #008080;">MovieClip</span> = <span style="color: #1e4af8;">this</span>.createEmptyMovieClip <span style="color: #3a3a3a;">&#40;</span><span style="color: #01B101;">&quot;navBtn&quot;</span> <span style="color: #3a3a3a;">+</span> i, i<span style="color: #3a3a3a;">&#41;</span>;
		<span style="color: #1e4af8;">var</span> btnTxt<span style="color: #3a3a3a;">:</span><span style="color: #008080;">MovieClip</span> = navBtn.attachMovie <span style="color: #3a3a3a;">&#40;</span><span style="color: #01B101;">&quot;btn&quot;</span>, <span style="color: #01B101;">&quot;btn&quot;</span>, <span style="color: #000099;">0</span><span style="color: #3a3a3a;">&#41;</span>;
		btnTxt._x = radius;
&nbsp;
		navBtn.circNavBtn <span style="color: #3a3a3a;">&#40;</span>i,<span style="color: #1e4af8;">this</span>,array<span style="color: #3a3a3a;">&#91;</span>i<span style="color: #3a3a3a;">&#93;</span><span style="color: #3a3a3a;">&#41;</span>;
		<span style="color: #1e4af8;">this</span>.btns.<span style="color: #008080;">push</span> <span style="color: #3a3a3a;">&#40;</span>navBtn<span style="color: #3a3a3a;">&#41;</span>;
	<span style="color: #3a3a3a;">&#125;</span>
	<span style="color: #1e4af8;">this</span>.circNavRot <span style="color: #3a3a3a;">&#40;</span><span style="color: #000099;">0</span><span style="color: #3a3a3a;">&#41;</span>;
<span style="color: #3a3a3a;">&#125;</span>;</pre></div></div>

<p>Her we dynamically create a movieClip, position in, then call our prototype to create the lovely Group94 style menu&#8230;</p>

<div class="syntax"><div class="code"><pre class="actionscript"><span style="color: #1e4af8;">var</span> testMenu<span style="color: #3a3a3a;">:</span><span style="color: #008080;">MovieClip</span> = <span style="color: #1e4af8;">this</span>.createEmptyMovieClip <span style="color: #3a3a3a;">&#40;</span><span style="color: #01B101;">&quot;nav&quot;</span>, <span style="color: #000099;">0</span><span style="color: #3a3a3a;">&#41;</span>;
testMenu._x = <span style="color: #000099;">20</span>;
testMenu._y = <span style="color: #000099;">112</span>;
&nbsp;
testMenu.circNav <span style="color: #3a3a3a;">&#40;</span>planets, <span style="color: #000099;">60</span>, <span style="color: #000099;">15</span>, <span style="color: #000099;">4</span><span style="color: #3a3a3a;">&#41;</span>;</pre></div></div>

<p>And finally we add the ability to use the mouse wheel to scroll the menu. otherwise we just click the menu items:</p>

<div class="syntax"><div class="code"><pre class="actionscript"><span style="color: #1e4af8;">var</span> mouseListener<span style="color: #3a3a3a;">:</span><span style="color: #008080;">Object</span> = <span style="color: #1e4af8;">new</span> <span style="color: #008080;">Object</span> <span style="color: #3a3a3a;">&#40;</span><span style="color: #3a3a3a;">&#41;</span>;
mouseListener.onMouseWheel = <span style="color: #1e4af8;">function</span> <span style="color: #3a3a3a;">&#40;</span><span style="color: #008080;">delta</span><span style="color: #3a3a3a;">&#41;</span>
<span style="color: #3a3a3a;">&#123;</span>
	<span style="color: #1e4af8;">var</span> navIndex<span style="color: #3a3a3a;">:</span><span style="color: #008080;">Number</span> = activeNavBtn.id;
	<span style="color: #1e4af8;">if</span> <span style="color: #3a3a3a;">&#40;</span><span style="color: #008080;">delta</span> <span style="color: #3a3a3a;">&amp;</span>lt; <span style="color: #000099;">0</span> <span style="color: #3a3a3a;">&amp;</span>amp;<span style="color: #3a3a3a;">&amp;</span>amp; activeNavBtn.id <span style="color: #3a3a3a;">&amp;</span>lt; planets.<span style="color: #008080;">length</span> <span style="color: #3a3a3a;">-</span> <span style="color: #000099;">1</span><span style="color: #3a3a3a;">&#41;</span>
	<span style="color: #3a3a3a;">&#123;</span>
&nbsp;
		testMenu.circNavRot <span style="color: #3a3a3a;">&#40;</span><span style="color: #000099;">1</span><span style="color: #3a3a3a;">&#41;</span>;
		testMenu<span style="color: #3a3a3a;">&#91;</span><span style="color: #01B101;">&quot;navBtn&quot;</span> <span style="color: #3a3a3a;">+</span> <span style="color: #3a3a3a;">&#40;</span>navIndex <span style="color: #3a3a3a;">+</span> <span style="color: #000099;">1</span><span style="color: #3a3a3a;">&#41;</span><span style="color: #3a3a3a;">&#93;</span>.activeBtn <span style="color: #3a3a3a;">&#40;</span><span style="color: #3a3a3a;">&#41;</span>;
	<span style="color: #3a3a3a;">&#125;</span>
	<span style="color: #1e4af8;">else</span> <span style="color: #1e4af8;">if</span> <span style="color: #3a3a3a;">&#40;</span><span style="color: #008080;">delta</span> <span style="color: #3a3a3a;">&amp;</span>gt; <span style="color: #000099;">0</span> <span style="color: #3a3a3a;">&amp;</span>amp;<span style="color: #3a3a3a;">&amp;</span>amp; activeNavBtn.id <span style="color: #3a3a3a;">&amp;</span>gt; <span style="color: #000099;">0</span><span style="color: #3a3a3a;">&#41;</span>
	<span style="color: #3a3a3a;">&#123;</span>
		testMenu.circNavRot <span style="color: #3a3a3a;">&#40;</span><span style="color: #000099;">-1</span><span style="color: #3a3a3a;">&#41;</span>;
		testMenu<span style="color: #3a3a3a;">&#91;</span><span style="color: #01B101;">&quot;navBtn&quot;</span> <span style="color: #3a3a3a;">+</span> <span style="color: #3a3a3a;">&#40;</span>navIndex <span style="color: #3a3a3a;">-</span> <span style="color: #000099;">1</span><span style="color: #3a3a3a;">&#41;</span><span style="color: #3a3a3a;">&#93;</span>.activeBtn <span style="color: #3a3a3a;">&#40;</span><span style="color: #3a3a3a;">&#41;</span>;
	<span style="color: #3a3a3a;">&#125;</span>
<span style="color: #3a3a3a;">&#125;</span>;
<span style="color: #008080;">Mouse</span>.addListener <span style="color: #3a3a3a;">&#40;</span>mouseListener<span style="color: #3a3a3a;">&#41;</span>;</pre></div></div>

<p>I hope this is useful to someone! If you find a home for it, please <a title="Contact soulwire" href="http://blog.soulwire.co.uk/contact/">let me know</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.soulwire.co.uk/flash/actionscript-2/prototypes/circular-group94-scrolling-flash-menu/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
