Hack 80 Lock the actions Layer 
ActionScript can be placed almost anywhere on
the timeline. Keep your scripts on a dedicated, locked
actions layer to promote separation of code from
assets.
In animation applications,
the timeline represents the passage of time.
Flash generates an event (onEnterFrame) every
time the next frame interval has started. That makes perfect sense
until you start adding code into the mix. Unlike other scripting
languages in which scripts are stored centrally, Flash code can be
attached to keyframes anywhere on the timeline, usually in the order
in which it needs to run, using the Actions panel.
Some developers choose to centralize their ActionScript on frame 1 of
the main timeline, but in many projects, at least some code is
attached to keyframes other than frame 1. Many developers even attach
code to buttons and movie clips on various layers. As the timeline
becomes long and many layers are added with code scattered
throughout, the Flash movie becomes more difficult to debug and
maintain. Developers often need to use the Movie Explorer
(Window Other Panels Movie Explorer) just to locate
their code!
To minimize the problem, name the first layer in your timeline
actions (or scripts) and
attach all your scripts only to that layer. Using a dedicated layer
just for scripts helps to centralize your code (you can use the same
layer for any frame labels you add via the Properties panel or create
a labels layer for that purpose).
Instead of attaching code directly to buttons and movie clips on
other layers, give your buttons and movie clips instance names using
the Properties panel. Then you can
"attach" code to a movie clip
indirectly by using its instance name in code written elsewhere. The
ActionScript code should be placed on the
actions layer, not on the layer containing the
clip, nor on the clip's timeline. For example, if a
movie clip has the instance name ballClip, you can
refer to it from code on the actions layer of
the main timeline and set its x coordinate as follows:
var ballClip:MovieClip;
ballClip._x = 50;
Locking a Layer
One simple
trick to keep your actions layer as a
script-only layer is to keep it permanently locked. Flash allows you
to lock any layer in the timeline by clicking the dot in the padlock
column that appears adjacent to the layer, as seen in Figure 10-9. To unlock a layer, click the padlock icon
that indicates a locked layer (in Figure 10-9,
Layer 2 is locked). Locking a layer
doesn't prevent the layer from being edited, as you
might assume; however, it does prevent anything from being added onto
the Stage in the locked layer.

Even when the layer is locked, you can:
Add keyframes to the locked layer (scripts can be attached only to
keyframes). To add a keyframe, select a frame on the locked layer and
press F6 (or choose Insert Timeline Keyframe) as
you would with any unlocked layer. Attach or edit scripts associated with keyframes on the layer using
the Actions panel (F9). Insert frames on the locked layer. To add a frame, select a frame on
the locked layer and press F5 (or choose
Insert Timeline Frame) as you would with any
unlocked layer. Subsequent frames are pushed to the right by the
newly inserted frame.
So, locking the actions layer prevents you from
drawing graphics in it or attaching symbols to its keyframes (thus
keeping it a script-only layer). However, you can add and edit
keyframes and scripts, even though it remains locked.
Final Thoughts
Although storing code in external
.as files is appropriate and recommended in many
applications, as is storing all your code in the first frame of the
main timeline when possible, this is just not practical when:
You are creating a full-length animation with ActionScript control of
timelines, such as for The Goober
Story (http://www.humbugz.com/hela.htm). You want to create simple timeline control. For example,
it's overkill to write a custom class to stop a
movie clip at frame 12. It's far better (and more
performance efficient) to simply add a stop( )
action at the required frame! You want to attach an event handler to a movie clip instance that
doesn't exist on the first frame. You cannot attach
an event handler on an instance before it exists. If a movie clip
doesn't exist on the timeline until frame 34, you
can attach the event handler to it using a script on the
actions layer in frame 34, but not in frame 33.
Even when such issues tend to spread out your code, you can still
keep the majority of your code on frame 1 of the
actions layer if you write all your scripts and
event handlers as functions and call the functions on the frames on
which they are required. This keeps most of your ActionScript on
frame 1.
|