I converted the old webcam motion detection thing to AS3 today. Not that it improves the performance much, just wanted to play around with it (source).
A common task that has changed drastically in ActionScript 3.0 is loading a library image via its linkageID into a BitmapData object and attaching it to a movieclip. In ActionScript 2.0, this can be done like so:
import flash.display.BitmapData var bmp:BitmapData = BitmapData.loadBitmap("linkageID"); var img = createEmptyMovieClip("img",0); img.attachBitmap(bmp,0);
In ActionScript 3.0 movieclips and bitmaps are not attached or created like this – everything is created with the new keyword. Also, a BitmapData object should be dropped into a new Bitmap, which can be added to the stage with the all-important addChild() method.
Since a library bitmap inherits from BitmapData, you now set the class of the bitmap its Linkage Properties in Flash CS3, instantiate it and wrap it in a Bitmap object that you add to the stage:
Where ‘Butterfly’ refers to the bitmap library item you’ve given the class definition ‘Butterfly’. The Base class is generated automatically. These five lines of code can be shortened to one, but is less readable:
var img = addChild(new Bitmap(new Butterfly(0,0)));
Note that in Flex Builder, unlike Flash CS3, you would embed an image using the embed meta tag, associating it with a variable, instead of its Linkage Properties dialog:
[Embed(source='image.jpg')] public var Butterfly:Class;
Building SWFs in Flex Builder is a whole different topic – so stay tuned!
As you can see, I’ve started a blog. I’ve also officially made the leap to ActionScript 3.0 for all my production. Some things I have noticed:
- Your memory management needs to be fastidious to avoid memory leaks and weird behaviour (more on this later)
- It feels more like a real programming language at last
- It runs A LOT faster. Tell a client this, if they’ve got you maintaining some AS2 dead horse
I’ll be posting stuff I learn about AS3 that you should know as I go… so stay tuned.