Creative Coding Podcast

March 4th, 2011 by Adrian

Creative Coding Podcast

A new podcast has been brought to my attention called the Creative Coding Podcast.

Hosted by Seb Lee-Delisle and Iain Lobb, two names I’m sure you will recognise from the UK Flash scene.

They will be discussing the ins-and-outs of programming for visual and creative applications. The first episode only went out on 30th January 2011, so it is still early days. Give them your support by subscribing in iTunes now.

Here are direct links to the three episodes so far …


UPDATE – October 29th 2012 – New episodes have been added below …

Posted in ActionScript 3.0, Adobe, AIR, Android, Augmented Reality, BlackBerry, Flash, Flash Catalyst, Flex, Game, Generative Art, Infographics, iPhone, Mobile, OpenFrameworks, Papervision 3D, Physical Computing, Podcast, Processing, Websites | 2 Comments »

AS3 Code Libraries (APIs)

August 19th, 2008 by Adrian

Here is a round up of some of the most popular ActionScript 3.0 (AS3) libraries out there to use.

Let me know if I have missed an important one off.

NOTE: This list was originally for my personal use (that I thought I would share), it is not intended to compete with or replace the list maintained by OSFlash or RIAForge.

Update 29/10/08: Ted Patrick has put together a list of ActionScript Cloud/Service APIs that he going to highlight during his Adobe MAX 2008 keynote presentation.

Update 28/11/08: I have just come across the Actionscript Classes website. A very handy resource.

Update 11/01/09: Rich Tretola has a small list of AS3 Libs on his blog EverythingFlex.

Update 12/01/09: The Flashchemist has compiled a similar list on his blog.

Update 27/02/09: Check out Spark Project which includes the FLARToolkit for Augmented Reality

Update 11/08/09: I just stumbled across this (old) list of projects.

Update 19/12/09: Sean “theflexguy” Moore has just written a blog entry called ‘List of 34 More ActionScript 3.0 APIs‘. This is a follow-up to his original post ‘List of 22 ActionScript 3.0 API’s‘.

Update 22/12/09: “30+ ‘Must Try’ Open Source Actionscript 3 Libraries” and “30 MORE Awesome Open Source AS3 Libraries

Update 28/01/10: “30 Classes AS3 bem úteis!”

Update 29/01/10: “15 Awesome ActionScript 3 Frameworks To Inspire Your Next Project”

Update 24/02/10: Emanuele Feronato has a good list of Isometric Engines on his blog

Update 19/03/10: Tom Krcha has posted a list of Flash Gaming Engines, plus a few others that were new to me.

Update 09/07/10: FluxDb has a huge list of AS3 Libraries.

Update 15/04/12: Exagone has a list of libraries

Update 16/04/12: 68 Small but Useful Open Source ActionScript Libraries (misc) help Flex/Flash Developers Improve Work Efficiency

Update 17/04/12: List of ActionScript 3.0 APIs

3D Engines

3D Game Engines

2D Engines (utilising the GPU using Stage3D)

2D Game Engines

Isometric Engines

3D Animation Framework

3D Physics Engines

Augmented Reality

Animation Tweening Engines

2D Physics Engines


Audio Libraries

Particle Systems

Data Visualization

Loading Kits

OOP Frameworks

Website Frameworks

Debug / Stats / Trace / Output Panels

Other APIs and libraries

Posted in ActionScript 3.0, AIR, Augmented Reality, Flash, Flex, Papervision 3D, Tweening | 123 Comments »

Papervision3D cubes x240

April 30th, 2008 by Adrian

I’ve just been having a play with Papervision3D 2.0 (Great White) and here are the results of my first test. I create 240 cubes inside a loop, positioning them in rows across the stage. Each cube uses six movieclips from the library as their materials. Each cube then rotates depending on the cursor position on the stage.

Here is the code for the document class.

    import flash.display.MovieClip;

    import flash.display.StageQuality;
    import org.papervision3d.cameras.Camera3D;
    import org.papervision3d.render.BasicRenderEngine;
    import org.papervision3d.scenes.Scene3D;
    import org.papervision3d.view.Viewport3D;
    import org.papervision3d.materials.*;
    import org.papervision3d.objects.primitives.*;
    import org.papervision3d.materials.utils.*;

    public class Main03 extends MovieClip
        private var face1:MovieClip;
        private var face2:MovieClip;
        private var face3:MovieClip;
        private var face4:MovieClip;
        private var face5:MovieClip;
        private var face6:MovieClip;
        private var viewport:Viewport3D;
        private var renderer:BasicRenderEngine;
        private var scene:Scene3D;
        private var camera:Camera3D;
        private var mm1:MovieMaterial;
        private var mm2:MovieMaterial;
        private var mm3:MovieMaterial;
        private var mm4:MovieMaterial;
        private var mm5:MovieMaterial;
        private var mm6:MovieMaterial;

        private var cube1:Cube;
        private var cube2:Cube;
        private var cube3:Cube;
        private var cube4:Cube;
        private var cube5:Cube;
        private var cube6:Cube;
        private var cube7:Cube;
        private var cube8:Cube;
        private var cube9:Cube;
        private var cube10:Cube;
        private var cube11:Cube;
        private var cube12:Cube;
        private var cube13:Cube;
        private var cube14:Cube;
        private var cube15:Cube;
        private var cube16:Cube;
        private var cube17:Cube;
        private var cube18:Cube;
        private var cube19:Cube;
        private var cube20:Cube;
        private var cube21:Cube;
        private var cube22:Cube;
        private var cube23:Cube;
        private var cube24:Cube;
        private var cube25:Cube;
        private var cube26:Cube;
        private var cube27:Cube;
        private var cube28:Cube;
        private var cube29:Cube;
        private var cube30:Cube;
        private var cube31:Cube;
        private var cube32:Cube;
        private var cube33:Cube;
        private var cube34:Cube;
        private var cube35:Cube;
        private var cube36:Cube;
        private var cube37:Cube;
        private var cube38:Cube;
        private var cube39:Cube;
        private var cube40:Cube;
        private var cube41:Cube;
        private var cube42:Cube;
        private var cube43:Cube;
        private var cube44:Cube;
        private var cube45:Cube;
        private var cube46:Cube;
        private var cube47:Cube;
        private var cube48:Cube;
        private var cube49:Cube;
        private var cube50:Cube;
        private var cube51:Cube;
        private var cube52:Cube;
        private var cube53:Cube;
        private var cube54:Cube;
        private var cube55:Cube;
        private var cube56:Cube;
        private var cube57:Cube;
        private var cube58:Cube;
        private var cube59:Cube;
        private var cube60:Cube;
        private var cube61:Cube;
        private var cube62:Cube;
        private var cube63:Cube;
        private var cube64:Cube;
        private var cube65:Cube;
        private var cube66:Cube;
        private var cube67:Cube;
        private var cube68:Cube;
        private var cube69:Cube;
        private var cube70:Cube;
        private var cube71:Cube;
        private var cube72:Cube;
        private var cube73:Cube;
        private var cube74:Cube;
        private var cube75:Cube;
        private var cube76:Cube;
        private var cube77:Cube;
        private var cube78:Cube;
        private var cube79:Cube;
        private var cube80:Cube;
        private var cube81:Cube;
        private var cube82:Cube;
        private var cube83:Cube;
        private var cube84:Cube;
        private var cube85:Cube;
        private var cube86:Cube;
        private var cube87:Cube;
        private var cube88:Cube;
        private var cube89:Cube;
        private var cube90:Cube;
        private var cube91:Cube;
        private var cube92:Cube;
        private var cube93:Cube;
        private var cube94:Cube;
        private var cube95:Cube;
        private var cube96:Cube;
        private var cube97:Cube;
        private var cube98:Cube;
        private var cube99:Cube;
        private var cube100:Cube;
        private var cube101:Cube;
        private var cube102:Cube;
        private var cube103:Cube;
        private var cube104:Cube;
        private var cube105:Cube;
        private var cube106:Cube;
        private var cube107:Cube;
        private var cube108:Cube;
        private var cube109:Cube;
        private var cube110:Cube;
        private var cube111:Cube;
        private var cube112:Cube;
        private var cube113:Cube;
        private var cube114:Cube;
        private var cube115:Cube;
        private var cube116:Cube;
        private var cube117:Cube;
        private var cube118:Cube;
        private var cube119:Cube;
        private var cube120:Cube;

        private var cube121:Cube;
        private var cube122:Cube;
        private var cube123:Cube;
        private var cube124:Cube;
        private var cube125:Cube;
        private var cube126:Cube;
        private var cube127:Cube;
        private var cube128:Cube;
        private var cube129:Cube;
        private var cube130:Cube;
        private var cube131:Cube;
        private var cube132:Cube;
        private var cube133:Cube;
        private var cube134:Cube;
        private var cube135:Cube;
        private var cube136:Cube;
        private var cube137:Cube;
        private var cube138:Cube;
        private var cube139:Cube;
        private var cube140:Cube;
        private var cube141:Cube;
        private var cube142:Cube;
        private var cube143:Cube;
        private var cube144:Cube;
        private var cube145:Cube;
        private var cube146:Cube;
        private var cube147:Cube;
        private var cube148:Cube;
        private var cube149:Cube;
        private var cube150:Cube;
        private var cube151:Cube;
        private var cube152:Cube;
        private var cube153:Cube;
        private var cube154:Cube;
        private var cube155:Cube;
        private var cube156:Cube;
        private var cube157:Cube;
        private var cube158:Cube;
        private var cube159:Cube;
        private var cube160:Cube;
        private var cube161:Cube;
        private var cube162:Cube;
        private var cube163:Cube;
        private var cube164:Cube;
        private var cube165:Cube;
        private var cube166:Cube;
        private var cube167:Cube;
        private var cube168:Cube;
        private var cube169:Cube;
        private var cube170:Cube;
        private var cube171:Cube;
        private var cube172:Cube;
        private var cube173:Cube;
        private var cube174:Cube;
        private var cube175:Cube;
        private var cube176:Cube;
        private var cube177:Cube;
        private var cube178:Cube;
        private var cube179:Cube;
        private var cube180:Cube;
        private var cube181:Cube;
        private var cube182:Cube;
        private var cube183:Cube;
        private var cube184:Cube;
        private var cube185:Cube;
        private var cube186:Cube;
        private var cube187:Cube;
        private var cube188:Cube;
        private var cube189:Cube;
        private var cube190:Cube;
        private var cube191:Cube;
        private var cube192:Cube;
        private var cube193:Cube;
        private var cube194:Cube;
        private var cube195:Cube;
        private var cube196:Cube;
        private var cube197:Cube;
        private var cube198:Cube;
        private var cube199:Cube;
        private var cube200:Cube;
        private var cube201:Cube;
        private var cube202:Cube;
        private var cube203:Cube;
        private var cube204:Cube;
        private var cube205:Cube;
        private var cube206:Cube;
        private var cube207:Cube;
        private var cube208:Cube;
        private var cube209:Cube;
        private var cube210:Cube;
        private var cube211:Cube;
        private var cube212:Cube;
        private var cube213:Cube;
        private var cube214:Cube;
        private var cube215:Cube;
        private var cube216:Cube;
        private var cube217:Cube;
        private var cube218:Cube;
        private var cube219:Cube;
        private var cube220:Cube;
        private var cube221:Cube;
        private var cube222:Cube;
        private var cube223:Cube;
        private var cube224:Cube;
        private var cube225:Cube;
        private var cube226:Cube;
        private var cube227:Cube;
        private var cube228:Cube;
        private var cube229:Cube;
        private var cube230:Cube;
        private var cube231:Cube;
        private var cube232:Cube;
        private var cube233:Cube;
        private var cube234:Cube;
        private var cube235:Cube;
        private var cube236:Cube;
        private var cube237:Cube;
        private var cube238:Cube;
        private var cube239:Cube;
        private var cube240:Cube;

        private var cubeSize:Number;
        private var spacing:Number;
        private var polys:Number;
        private var numCubes:Number;
        private var numCols:Number;
        private var numRows:Number;
        public function Main03():void
            var i:Number;
            var j:Number;
            cubeSize = 15;
            spacing = 25;
            polys = 1;
            numCols = 20;
            numRows = 12;
            numCubes = numCols * numRows;
            stage.quality = StageQuality.LOW;
            var offset:Number = spacing/2;
            var startX:Number = ((stage.stageWidth/2) * -1) + offset;
            var startY:Number = ((stage.stageHeight/2)) - offset;
            viewport = new Viewport3D(0, 0, true, true);
            viewport.buttonMode = false;
            renderer = new BasicRenderEngine();
            scene = new Scene3D();
            camera = new Camera3D();
            camera.zoom = 11;
            camera.focus = 100;                
            face1 = new Face1();
            face2 = new Face2();
            face3 = new Face3();
            face4 = new Face4();
            face5 = new Face5();
            face6 = new Face6();
            for (i=1; i< =6; i++) {
                this["mm"+i] = new MovieMaterial(this["face"+i]);
                this["mm"+i].interactive = false;
                this["mm"+i].smooth = false;
                this["mm"+i].animated = false;

            var counter:Number = 1;
            for (i=1; i<=numCols; i++) {
                for (j=1; j<=numRows; j++) {
                    this["cube"+counter] = new Cube(new MaterialsList({front:mm1, back:mm2, left:mm3, right:mm4,top:mm5, bottom:mm6}), cubeSize, cubeSize, cubeSize, polys, polys, polys);
                    this["cube"+counter].x = startX + (spacing * (i - 1));
                    this["cube"+counter].y = startY - (spacing * (j - 1));
            for (i=1; i<=6; i++) {

            stage.addEventListener(Event.ENTER_FRAME, stage_ENTER_FRAME);
        private function stage_ENTER_FRAME(event:Event):void
            var xDist:Number = mouseX - stage.stageWidth * 0.5;
            var yDist:Number = mouseY - stage.stageHeight * 0.5;
            for (var i:Number = 1; i <= numCubes; i++) {
                this["cube"+i].rotationY += xDist * 0.05;
                this["cube"+i].rotationX += -yDist * 0.05;
            renderer.renderScene(scene, camera, viewport);

If anyone knows how you can declare the private variables for the cubes in a loop then I’d love to know how you do it.

Remember to download and install the Papervision 2.0 (Great White) classes from GoogleCode and modify the class path in the publish settings dialogue box.

You can download the zipped up source files here.

Posted in Flash, Papervision 3D | 6 Comments »

Installing Papervision3D on Flash and Flex

April 24th, 2008 by Adrian

Papervision3D, Flex and Flash Logos

Fabian Vercuiel has posted a useful entry on his blog titled ‘Installing Papervision3D on Flash and Flex‘ which outlines how to get up and running with Papervision3D using Flash and Flex.

He covers, downloading and installing a subversion client such as TortoiseSVN, getting the Great White Papervision3D files from GoogleCode, downloading and installing the Flash Extension (mxp file), adding the Papervision3D class-path, adding the SWC file in Flex Builder.

This is all pretty useful information if you haven’t done it before.

Posted in Flash, Flex, Papervision 3D | 1 Comment »

Flash on the Beach 08

April 21st, 2008 by Adrian

Flash on the Beach 08

Yipee! Ordered my Flash on the Beach 08 ticket this morning. The tickets went on sale this weekend (just gone) and already 150 tickets have been sold. The first 250 tickets can be purchased at the reduced Super Early Bird price of £199 for the 3-day conference pass. They are also holding two pre-conference workshops on the Sunday (28th Sept), I have booked for the Papervision3D session.

Currently, there are 94 Super Early Bird tickets left. So get in there quick if you want to save some money.

At the time of writing, the confirmed speaker list (with links to their personal websites) includes …

I’m really looking forward to it. I went to both the 2006 and the 2007 conference and it is a fantastic event. We’re so lucky to have an event like this held in the UK. I always come away from it inspired, fired up and wanting to learn more. Many thanks to John Davey for organising this awesome event every year.

If you haven’t been before, get your tickets and see for yourself. I’ll see you there …

Posted in ActionScript 3.0, Adobe, AIR, Conferences and Events, Flash, Flex, Papervision 3D | No Comments »

London Flash Platform User Group (LFPUG) meeting – Jan 2008

February 1st, 2008 by Adrian

London Flash Platfor User Group

Last night was January’s London Flash Platform User Group meeting at the CosmoBar in Clerkenwell. The speakers were Paddy Keane talking about his experience of using PureMVC and Rob Bateman talking about the history of 3D on the web. The event was so popular that Tink had to send an email out to everybody warning that over 120 people had signed up to go, and that places would have to be on a first-come-first-served basis (normally we only get around 40 – 50 people). Anyway, here is a quick bullet point summary of what they covered.

PureMVC (19:00 – 20:00) – Paddy Keane

  • Why use a framework?
    • gives agility to the project and code
    • helps with risk management
    • good when features are changing
  • Based on Model, View, Controller but with additional Façade
    • gives code clarity
    • shows your coding intent
    • need to have good Development Process
    • start with a list of features
    • mock-up features and then test
  • The best way to get started with PureMVC is to read the Best Practices document and then read it again

The 3rd Way: Handling 3D on the Web ( 20:15 – 21:15 ) – Rob Bateman

Posted in ActionScript 3.0, Conferences and Events, Flash, LFPUG, Papervision 3D | No Comments »

15 Things to look in to during 2008

January 31st, 2008 by Adrian

Here is a list of things I want to look in to during 2008. If there is anything you think I should check out but have missed off this list then let me know.

  1. Papervision3D
  2. Tweener
  3. TweenLite
  4. Go (Go ActionScript Animation Platform)
  5. KitchenSync
  6. Xray (The AdminTool)
  7. AS3 Bulk Loader Library
  8. SWX: SWF Data Format
  9. Adobe Flex 2 & 3
  10. Adobe AIR
  11. Eclipse and FDT 3.0
  12. Cairngorm
  13. PureMVC
  14. ActionScript 3.0
  15. SWFAddress

Not necessarily in that order. Wish me luck!

Posted in ActionScript 3.0, Adobe, AIR, Flash, Flex, Papervision 3D | 2 Comments »

London Flash Platform User Group (LFPUG) meeting

January 28th, 2008 by Adrian

London Flash Platform User Group

This Thursday (31st January) there is a London Flash Platform User Group meeting. The speakers lined up are Paddy Keane talking about PureMVC and Rob Bateman talking about 3D in Flash (Away3D, Papervision3D and Sandy). It should be very interesting.

As always, a big ‘thank you’ to Tink for organising the event.

Time: 19:00 – 23:00 (doors open at 18:30)
Venue: CosmoBar, 50-54 Clerkenwell Road, EC1M 5PS (click for map)

Posted in Conferences and Events, Flash, Papervision 3D | No Comments »

Flash On The Beach ’07 – Visited Seminars

January 28th, 2008 by Adrian

Flash On The Beach logo

Back in November 2007 I went down to Brighton for the Flash On The Beach conference. It was a fantastic event (as it was in 2006) and John Davey did a great job of organising the event and getting a wish list of speakers from around the world. Here is a list of the speakers that I managed to catch across the three auditoriums.

Monday 5th November

Tuesday 6th November

  • Ted Patrick – Flex and ActionScript 3 Worst Practices
  • Craig Swann – Perceptive Interactions + Alternative Interfaces
  • Aral Balkan – Let’s talk about SWX, baby!
  • GMUNK (Bradley Grosh) – GMUKNICKDOWN 07
  • Alex Jenkins – Pulling the emotional trigger.

Wednesday 7th November

All of these presenters are doing some amazing work and I came away from Brighton really inspired and eager to learn more. Here’s looking forward to Flash On The Beach 2008!

Posted in Adobe, AIR, Conferences and Events, Flash, FlashLite, Flex, Papervision 3D | No Comments »