views:

84

answers:

3

After many years of using Flash 8, I'm moving to CS3 at work. I know I'll have to learn AS 3.0 so, does anyone have any good references or summaries of the major/most noticeable changes? Also, are there any tips/tricks for the flash environment? After spending a few minutes in CS3, I noticed that you can't directly attach actionscript to a button, which is new to me. Any other such pitfalls to watch over?

+2  A: 

I suggest you to look at the ActionScript language migration page on the Adobe devnet. It offers quite a lot articles about the key changes with ActionScript 3.

To answer your problem with the actions on a button, this no longer works (and was already with ActionScript 2 not the best way to do it). AS3 requires the code to be centralized on the timeline. So for giving a button some action, you'll need to give it an instance name and add an event listener for the CLICK event, like this:

function doSomething ( event:MouseEvent ):void
{
    trace( "test" );
}
myButton.addEventListener( MouseEvent.CLICK, doSomething );
poke
+3  A: 

I made the total switch just about 3 months ago, here are some things that helped me ramp up rather quickly:

1) Do everything in Class files

A lot of AS3 tutorials out there deal with just code pasted on the timeline (which I can't stand because now you have to hunt for what import you need), but is fine for quick tiny stuff. In the long run it's way better work primarily in Class files. Learning how Classes work opened a huge door for me, it was the same feeling/experience I had when I first discovered Functions in AS2 :)

2) Keep graphics in library and off the workspace

Example, you have a jpg, gif, png file you just imported into your library. Made a movieClip and gave it a class name(MyButton). Now the code below will place the graphic into the workspace for you:

var myButton:MovieClip = new MyButton();
    myButton.x = 6;
    myButton.y = 22;
    myButton.buttonMode = true;

addChild(myButton);

3) Get use to the new button code in AS3

It's something all of us new converts had to deal with painfully, but now it's a piece of cake :)

myButton.addEventListener(MouseEvent.MOUSE_UP, clickThis);

function clickThis(event:MouseEvent):void
  {
   navigateToURL(new URLRequest("form.html"), "_self");
   //navigateToURL(request, '_self');
  }

4) Make sure you remove Event Listeners after use

It took me a bit to wrap my around this one... remove em why? Oh they are still running in the background and when I listen again I'll get all kinds of mutated errors.

private function volDown(e:MouseEvent):void
 {
  masker.width = volControl.mouseX;
  userVolume = (masker.width / 100) * 1;
  volControl.addEventListener(MouseEvent.MOUSE_MOVE, volMove);
 }

private function volUp(e:MouseEvent):void
 {
  lastVolPoint = masker.width;
  setVolume(userVolume);
  e.updateAfterEvent();
  volControl.removeEventListener(MouseEvent.MOUSE_MOVE, volMove);
 }

5) Don't forget to pass Events

I'm not a programmer by trade and this has caused so much grief, I'm glad I'm done with this birthing pain:

myButton.addEventListener(MouseEvent.MOUSE_UP, clickThis);

Since the clickThis function is launched via an Event, you have to pass: event:MouseEvent into it like so:

function clickThis(event:MouseEvent):void

Because the code below will throw the dreaded AS3 "Access of undefined property" error that new AS3 guys will always run into.

function clickThis():void

6) Read and post questions on StackOverflow... a lot!

btw I'm still a noob and originally a designer then AS2 dev, I still don't know why we put :void behind a function name.. if we have similar coding backgrounds I hope all that helps :)

Leon
Nice answer, very thorough. +1We put void behind a function name so that the function knows that it's not returning anything, or that it's returning a *void*.Functions (should) return values although they don't always and the :xyz after the function name tells us what type of object the function is returning. If I was writing a math function called add:function addEm(a:Number, b:Number):Number{ return (a+b);}(I've been doing AS3 for about 2 years. I still don't do classes. Personal preference. In other languages, of course, I do what is necessary classwise.)
Moshe
(Excuse the lack of line breaks in the previous comment, I forgot about that...)
Moshe
Leon
wow, I just realized how much texting, Flash and social media websites influence my typing style now...
Leon
+2  A: 

Get an Actionscript 3 IDE. Such as Flash Builder, FlashDevlop, or FDT. This will force you to learn really fast.

TandemAdam