Anatomic

Flash, Actionscript, Papervision3D and assorted other nonsense. 

FITC Amsterdam Diary - Day 2

It's taken far too long to get this post up, so many apologies but I hope something of interest comes from it anyway!

An unusual start...

Day 2 started with a really odd, but cool, surprise - I won an FITC custom bike!!  There had been a competition where a random tweet from someone at the conference would be chosen and that person would win one of the bikes on display in the Felix Meritis lecture halls.  Winning a bike was cool, getting it home, however, was not going to be!! Sadly, the cost of transporting the bike was going to be too high, so I left it with one of the Dutch Flash guys I met during the conference.

3D For The Masses - Carlos Ulloa

Back in November I attended a very in-depth training course with Carlos, so a lot of his presentation wasn't that new to me.  As always, his work was incredible and included his most recent experiments with Unity 3D on both the iPhone and using the desktop plugin.  If you've not had a chance to check out his Hello Racer site, the go and do so now, it's ace!  www.helloracer.com

Building Maintainable Applications with PureMVC - Javier Julio

Javier was one of the intrepid FITC attendees that met up on Sunday night to get some pancakes after organising dinner using Twitter and I'd had his talk earmarked as one to see before attending the conference as I'd used PureMVC on several projects for Warner Music.

His presentation was well organised, informative and above all interesting.  I was kind of dropped in at the deep end with the PureMVC projects I'd worked on, so it was good to see what I'd done correctly and what, if anything, was wrong with my implementation.  PureMVC is definitely up there as one of the best implementations of a framework for AS3/Flash/Flex and Javier managed to communicate it's strengths really well.

Work / Play - Seb Lee-Delisle

I have always really enjoyed Seb's talks, and the work he shows is always inspiring and brilliant.  This talk wasn't about anything new that he's been working on, though I'd never seen his anaglyphic 3D stuff before so that was really cool.

The work he does for both Plug In Media (www.pluginmedia.net) and as personal projects (www.sebleedeslisle.com) is incredible - if you've not come across any of it, check out Big And Small and you'll soon see why he's held in such high regard. (http://www.bbc.co.uk/cbeebies/bigandsmall/games/bigandsmallhouse/)

We couldn't quite get the hang of 3D pong (but gave it a good go) but I think that the other main piece of work that amazed everyone was the lunar lander game he created.  To be able to produce something that cool with a file size of 5K is absolutely stunning!

(download)

Although Seb may disagree, his early start for the day (3am to get from Brighton to Amsterdam on time) actually enhanced his already humorous and typically British humour and though I was sat there laughing away I did wonder whether some of the other attendees 'got' his sense of humour.

The Cool Shit Hour

This was a mixed bag really, especially the poor guy that stood up to talk about motion graphics but couldn't the projector resolution correct so ended up showing us a tiny corner of a website.

In brief, the talks included a demonstration of some voice recognition stuff (using the new features in Flash Player 10.1), Infrared5's BrassMonkey WiFi communication framework that allowed the Trench Run iPhone app control the desktop version of the game over the WiFi network, Peter Nitsch's ASCII vimeo (www.asciimeo.com), Samuel Agesilas showing us his dynamic layout framework Orchid (for use in Saffron) and the aforementioned motion graphics disaster from KGB Amsterdam!

Cinema 4D

After the cool shit I snuck down to the Dylan Ariana Room to see Cinema4D in action.  It looks like a great piece of software and I'd like to give it more of a go but unfortunately our production at the moment is so tight for time I think my 3D stuff will have to stay using Blender.  I do hope to get to grips with Cinema4D as the motion graphics stuff looked really nice (and the animation controls seem to be very intuitive).

North Kingdom - An Inside View

Anyone that works with Flash will know about North Kingdom and the exceptional quality of work that they put out so this talk was one that I'd triple circled in the FITC schedule as a 'must not miss'.

David Eriksson (Creative Director and CEO), who is a surprisingly shy and nervous guy given the stature of his company and his physical presence, talked us through the NK process overall and then specifically through the Teamgeist project they delivered for Adidas.

Seeing how the company is set up, their process, the attention to detail in everything they do (including mock ups and sketches) and their values was really inspirational and gave me something to aspire to in my professional life.  A great talk.

Wrap Party

The wrap party at Supperclub was great (especially the free bar)!  I got chatting to some friends I'd met during the conference and also some of the speakers (including a funny chat about international differences with Chris Allen!) with the best bit being the chance to bend the ear of Erik Natzke about his work.

I managed to nab Fernando Colaco's fold up bike at the end and had fun pulling out some tricks on the dancefloor (badly) - thankfully he's falsely accused somebody else of robbing his bike on the ActionscriptHero.org site so I think I've got away with that one!!

Home again

With the conference over, I headed home on the same flight as some very hungover looking boys from Fuse8 and landed back in Yorkshire to be greeted by fog and snow, the UK really is a wonderful place! 

Loading mentions Retweet

Comments [0]

FITC Amsterdam Diary - Day 1

FITC got started properly today and judging by the crush to get into the Keynote by Richard Galvan and Mark Anders it was going to be a busy day!

The Adobe guys walked us through the new features in Flash Player 10.1 and Flash Pro CS5 in what was a fairly predictable session. It was interesting to see them showcasing 10.1 running on a wide variety of devices (including mobile phones) and I have to say the performance looked pretty good.  Flash CS5 and the iPhone packager have been fairly widely covered in the past few months and some hands on experience meant that there were no surprises there for me.  Just for the record, CS5 is looking good and brings some really interesting new features that I'm sure will up the quality of Flash output in the coming years - the Text Layout Framework options certainly being one of the standout additions.

Of particular interest (well, if we don't include Richard Galvan's tongue in cheek shirt!) was the announcement that Google and RIM (makers of the BlackBerry mobile devices) have joined the Open Screen Project.  There were a load more latest additions, but these two names in particular meant that there was one very ominous and obvious corporation missing.

This whole Apple and Adobe situation has been done to death so I'm going to keep my comments brief.  With Google (not so much RIM here) signing up, you've got to wonder which of the heavyweights will win out between Adobe and Apple, as Google is now so huge and powerful you could almost liken it to The Internet vs. The Mobile Phone.  My personal opinion is that Apple don't want to lose out on income through flash games becoming available for iPhone and iPad, thus removing their stranglehold on monetizing applications for their platform.

The Speakers

Today's line up was immense, featuring some true legends of the interactive and generative art world.  I wish I could have seen all of the sessions as there were many that got rave reviews and looked great.  It was the offering in the main room that I was really interested in, with such luminous speakers as Mario Klingemann, Grant Skinner, Ralph Heuwart, Jared Tarbell and Erik Natzke all presenting.

Mario 'Quasimondo' Klingemann got things going nicely with some incredible graphics produced solely using actionscript and maths -  something that I've been experimenting with more and more recently.  He also gave a glimpse into the world of an obsessive organiser by showing his holiday beach snaps where he'd collected and sorted all manner of beach junk before making some home made geometry tools to make maths images in the sand!  

Oh, and I nearly forgot about his challenge to encode a graphic into 140 characters to put on Twitter.  Do a search on Google for it, it's highly geeky and massively creative!

Grant's talk about optimisation was great, though a little dry when compared with some of the other speakers' offerings.  He is the authority when it comes to talking about optimising code for the Flash Player and as a result I've got some five pages of notes from his talk.  This was possibly the single most business relevant and useful talk I attended today.

After meeting up with a new friend for lunch, I headed back to the Felix Meritis for three more incredible talks.  Ralph UnitZeroOne was up first and the guy is crazy.  Crazy and brilliant.

I'd love to talk you through his session, but honestly it boils down to three things, stunning work, massive intelligence and Pixel Bender.  I've got a video to download that shows his parting shot (that was simply amazing) and I'll post it as soon as I can get it online.  Check out his effort for http://www.letitbloom.com/#ralph in the meantime, it's 15 000 particles of sheer beauty.

Jared Tarbell's talk about 'The Strangest Things I've Ever Seen' showed the work he's done in the generative art world that follows on from his highly inquisitive and creative nature.  It was a beautifully delivered presentation that featured some really great work.  Inspirational stuff and you should try and catch this guy speaking any time you get a chance.  I particularly enjoyed that he talked about ideas and thoughts and didn't go into much depth about code and how to do what he did.  It's the way I try to work, leading with ideas and concepts and following up with the technical solution that fulfils that vision best, not providing a solution based on a certain technology or technique because it's what I've just learnt or the latest fashion.

The last talk of the day was Erik Natzke, someone that I've bored many a person back at home about.  His session walked us through how he came to produce the various styles of work that he's become known for, and again it was the curiosity that he showed in his work that truly impressed me.  I think his output is fantastic and it was great to see some of his prints close up (they are crazy in the amount of detail!) though at 300 Euro a pop I couldn't really splash out to bring one home with me.

Erik showed how the out-there, conceptually rich endeavours that he's undertaken could be combined with the commercial needs of a graphic designer to ultimately provide a very fulfilling and exciting career.  Please check out his work if you can, it's nothing short of stunning! If you get the chance to see him speak, you'll be even more in awe as you see just how much thought and effort goes into each piece of work - it's definitely not just input photo, turn on Natzke filter, get artwork!

Apres FITC

This evening a few of us that met yesterday were joined by some new faces for dinner at Ocho in the centre of Amsterdam.  It was another great evening of getting to know fellow designers and developers from around the world - we had people from America, Belgium, Brazil, France, Germany, Portugal and the UK.  FITC is proving to be a great conference, packed with passionate and friendly people from around the world.  

Bring on more tomorrow!!

Loading mentions Retweet

Comments [0]

FITC Amsterdam Diary - Workshop Day

Today was day zero of the FITC Amsterdam conference with three workshops being held in the Felix Meritis centre, a gorgeous building inside and out, with some really unusual features. Our workshop was on the first floor and the room had a large ceiling with huge pillars lining the longest sides. The main Concertzaal room is equally impressive and spacious - though it needs to be judging by how popular the event is!

I was booked to attend the Byte My Flash track, hosted by Lee Brimelow and Thibault Imbert, a full day workshop about programming at byte level in Actionscript 3. The two other tracks covered custom events and getting creative using the HYPE framework and both looked good. I was a bit gutted to not get to see Branden Hall and I think this could be a recurring problem with such a talent packed schedule of events!

The ByteArray workshop definitely had the potential to get quite gnarly but for the most part it was kept at a good, understandable level. Lee is an accomplished and excellent speaker about programming flash and Thibault is a crazy French Actionscript ninja so we were in safe hands. The hardest thing seemed to be getting the Flex 4 and AIR 2.0 frameworks set up properly for Thibault's topics - I'll echo Lee's comment about Flex and the trouble it causes! (As a quick side note, check out bytearray.org - it's Thibault's blog and has so much crazy stuff packed into it!)

We covered stuff like making a custom FTP client, decoding PSD and BMP images, creating sounds from code, reading pop mail and finished by making an air app that uses the AIR 2.0 NativeProcess class to encode live microphone data to an mp3 file. Pretty damn cool stuff and only a taster of what is possible when you work at byte level. It's exciting to think how much potential there is to extend the Flash Player.

Even cooler (potential oxymoron coming up) was the World of Warcraft demo from Mike Chambers, showing us a neat app that could send images over a socket to a client on an iPhone developed in Flash CS5. Impressive!

After the workshop I went back to the hotel for a bit and checked on twitter to see what sort of buzz there was about FITC and to see if there was anyone around that fancied chatting about flash over dinner.

One of the things I really enjoy about working with the Flash Platform is the community and tonight was a great example of how strong it is. Five of us (the majority strangers to one another) met at the Pancake Bakery in the North of the city after arranging to meet up on Twitter. It was great, especially given that I'm the only person from Coolpink to head over (all alone in the big city!) and didn't know anyone here in Amsterdam. It was really interesting to see how different nationalities go about their business and how their industry is viewed by their surrounding economy - I never want to work as a Flash Designer in Portugal!

That's it for today, I'm putting my feet up in the hotel bar and getting ready for a really busy day tomorrow. So many good talks, but I'm really excited to see Erik Natzke and Ralph Hauwert. Looking at the schedule I think I'm going to be camping out in the main room!

Loading mentions Retweet

Comments [2]

Playing with graphics: making pretty patterns from sound with Actionscript 3

Bit of a big one to download but worth the wait - using code to produce interesting graphics based on data from a song.

(download)

Song used is Calvertron - Doggy Style (Zodiac Cartel Mix)

Loading mentions Retweet

Comments [2]

Performance test with AS3 and thousands of particles

(download)

I've never experimented with using bitmapData and the copyPixels() method to increase performance when animating a large number of particles so I thought I'd have a quick play to see what could be achieved.

This demo has 2000 particles that bounce off the walls, have gravity and friction and are given a small motion blur and it manages a nice 24/25 fps (see the stats).

As I said above, this is a first proper experiment where I've tried to bypass the Flash Player vector renderer and I'm amazed by the results!

Click your mouse to restart the animation.

Loading mentions Retweet

Comments [0]

Starting to play around with generative art using Actionscript 3.0

Up until recently I've not had much of a chance to play with generative art, though it's something that I've meaning meaning to check out for ages.  I've looked into Processing and had a little play with NodeBox before, but have never really used Flash in this capacity.  Flash, however, is an excellent environment to get into generative art as coding on the timeline can be loose and fast, with no need to get into classes and objects (unless you want to).  I think the term is 'sketching' and it's a good way to think of this sort of coding.  It's coding for designers, not developers.  Quick (and dirty) little scripts with no regard for performance that solely exist to produce interesting (if not beautiful) graphical output.


Lissajous Curve

Lissajous is a term that I've heard several times, most recently from Brendan Dawes (http://brendandawes.com) as he used the formula in his recent 'Elena' iPhone app.  Lissajous Curves (or Bowditch Curves) refers to a family of curves investigated by Nicholas Bowditch and later by Jules Antoine Lissajous and are produced from the following equations:

x = A sin(at + d), y = B sin(bt)

I don't profess to being an expert in this field, so I'd highly recommend having a good search for more information.

The curves change quite dramatically when the constants in the equations are changed, with some of the most interesting patterns happening if they are changed over time.

Some images

Below are some of the images that I've produced using these equations.  There's nothing more complicated than drawing dots, squares and lines involved in most of them.  I found that the code tends to change quite fluidly after a 'run' and this is something that I really enjoyed about this sort of work.  It changes, it evolves.  There's a constant 'what if...?'  You are encouraged to explore different algorithms and different ideas to see what happens.  It brings back the 'happy accident' to coding.  Although I've not done that much yet, I can definitely see myself turning to generative art as a break from photoshop and more application based flash development.

Further reading

If this has got you thinking about generative art, I'd definitely recommend reading some of the posts from the following people:

Also check out http://www.letitbloom.com/ for some great work by the above people and more (hint, press refresh!).

 

 

           
Click here to download:
Starting_to_play_around_with_g.zip (4368 KB)

Loading mentions Retweet

Comments [2]

How to reuse actionscript code when working with Flash CS4 - a quick AS3 tutorial

Just a quick one this, hopefully showcasing how to use classes with MovieClips in Flash CS4.  I'll cover two basic methods, one ties different MovieClips to a base class and the other re-uses a button class.

Making a reusable button

To keep it quick and easy this will be a simple fade in and out effect on a button so start off by making a button design that contains a dynamic text field with an instance name of 'label'.
Once our MovieClip is created, it needs to be setup to export for ActionScript.
 
 

First, open the properties for the symbol in the Library, then tick the 'Export for ActionScript' box and fill in the correct linkage.  
Notice here that for the class I've typed in net.anatomicdesign.Button - this is something that I'd encourage any developer to do as it is industry best-practice.  For small things like this it doesn't make too much sense, but on larger projects organising your classes into proper packages is really important so it's good to get into good habits.

From here, create a new ActionScript3 document called Button.as and save it in the folder net/anatomicdesign/ (or whatever the package names are that you choose to use).

Now it's just a case of filling in the code.  I normally start off by deciding what I want to happen in a class and then building up functionality from there so, for the button class we'll typically need event listeners for mouse over, out and click.  From here, you can go on to insert the code needed to animate the button (perhaps using a Tweening library such as TweenLite) in the correct functions.  Note that if the button needs any setting up, that code should be added to the constructor (the function that is given the same name as the class).  For this example, I'm adding a parameter to the button that sets the button's label and I'm also going to alpha out the button slightly.

To use the button you can either place instances on the stage and set the labels using timeline code (using the setLabel function) or you can simply delete the instance from the stage and add the button using code such as

var buttonA:Button = new Button('First Button');

Giving different button designs the same functionality

A slight twist on the previous example is using a base class to provide the same functionality to different MovieClips.
Instead of linking the Class to the Button.as, we'll leave the name the same as the Symbol name and instead set the Base Class to be Button.as

Doing this, Flash will create a unique class for the button at runtime, but it will inherit the super class' functions.  So if Button.as (at its most basic) looked something like the code below, any button that had the Base Class set to Button.as would be  ready with listeners setup for mouse over, out and click.  This could be taken further if you wanted them to have the same animation/tweened properties by adding the appropriate code to the relevant functions.

Hope this helps out some people that are just getting to grips with Object Oriented Programming within Flash using ActionScript 3.  AS3 is really powerful and a lot faster than AS2 so keep plugging away if you're struggling, it'll all be worth it in the end!!

Loading mentions Retweet

Comments [0]

Actionscript 3 Display List Tutorial Part 1: Getting To Grips With The Basics

I've been meaning to write a little introduction to the Display List for quite some time so hopefully this post will provide some very useful tips and tricks for people that are just delving into working with AS3.  It's not an advanced tutorial but hopefully there'll be something of use to most Flashers!

To start with AS3 is different to AS2 in that a display object doesn't have access to the Stage until it is added to the display list.  This is a key thing to keep in mind when working with movieclips and sprites in code, especially when trying to initialise a movieclip that needs to know the stage size before it is added to the display list.  This might sound weird if you're new to Flash and haven't touched AS2, but if you're coming from AS2 it's an important change to the way everything works. With that out of the way, what is the display list?

Display List Basics
Think of the Display List like a family tree.  Sitting at the top is the Stage, it's the top level display object container and if you want to have something visible to the user then that movieclip (or sprite) needs to be added as a child to the stage.  This looks something like this:

     stage.addChild(myDisplayObject);
 

With AS3 you don't necessarily need to write that line of code, especially if you are working with a Document Class.  Typically you will write the code like this

     this.addChild(myDisplayObject); //when working inside the Document Class
     myDocumentClass.addChild(anotherDisplayObject); //when working with a class that holds a reference to the Document Class
 

Now, in this family tree business you don't have everyone with one parent (that would be madness) - you have variations generations of parents and children (who can become parents themselves).  The Display List works in a similar way with Movieclips and Sprites having functionality to be parents to other Movieclips (and Sprites) as well as children.  In its simplest form this means that you can add Movieclips to other Movieclips as children.  The key thing here is that an object can only have one parent, but (unlike the family tree metaphor) that parent can be changed at any time.  You can also remove an object from the Display List completely.  The following example shows some variations of adding, re-parenting and removing objects from the Display List.

     var a:MovieClip = new MovieClip();
     var b:MovieClip = new MovieClip();
     var c:MovieClip = new MovieClip();
 
     stage.addChild(a); //add the first movieclip to the stage
     b.addChild(c); //add c to b.  NOTE:  neither of these two clips are on the stage yet, as the parent hasn't been added to the display list
     a.addChild(b); //now all three are visible as a is the parent of b and a has already been added to the display list
 
     a.addChild(c); //we have re-parented c from b to a so both b and c are children of a
 
     a.removeChild(b); //the only items visible now are a and c
 

The order that you add children to a parent determines their depth in the list, with the last added child being the highest up in the Display List.  This is important to remember if you find that objects are hiding other objects in a way that you don't want.  If you find yourself in this situation you can simply add the hidden object again (no need to remove it) and that will move it to the top of its parents list.

What Else Can You Do With This?
This is working with the display list at its most basic and doesn't really hold much of interest other than getting your objects to be viewable by the user.  I'll go over some more advanced techniques in the next part of the tutorial (which starts to look at other functions that allow you to work with the Display List) but as a parting shot I'll just cover some ways to hide objects from view.

The Flash Player isn't the most performance savvy piece of software so whenever possible you have to lighten it's processing load to get the best possible performance and hiding objects is one little tip that can claw back precious miliseconds of processing.  Simply put, setting a Movieclip's alpha value to 0 will still result in a performance hit as it will still be rendered by the Flash Player.  Typically if you are going to set alpha to 0, you should also set visible = false for that object so that the Flash Player will ignore that object when doing a render.  It doesn't seem like much when you're working on a small project, but if you start working with a large number of Movieclips this sort of optimisation becomes absolutely essential.

Lastly, if you're not going to need a Movieclip for quite some time (if at all) then it's best to remove it from the Display List altogether.  To sum up:

     myClip.alpha = 0;  //bad
 
     myClip.alpha = 0;
     myClip.visible = false; //better
 
     stage.removeChild(myClip); //best - substitute stage for the clip's parent
 

Loading mentions Retweet
Filed under  //   actionscript 3   flash   tutorial  

Comments [0]

The coldest drive to work yet!

Loading mentions Retweet

Comments [1]

Ice skating in Guiseley!

Loading mentions Retweet

Comments [0]