Upload
terrableu-prods
View
215
Download
0
Embed Size (px)
Citation preview
7/27/2019 Actionscript Basics
1/8
Actionscript basics
W E B - A N D M U L T I M E D I A D E S I G N
7/27/2019 Actionscript Basics
2/8
This document is a short introduction to the programming language that enables you to create
highly interactive Flash movies, and that makes things possible that without scripting would
be a no-go. It is NOT a comprehensive tutorial on actionscript and NOT a reference. For more
information on actionscript Id suggest you have a look at the actionscript dictionary that
comes with ash and/or get a hold of that great book by Colin Moock, called Actionscript the
denitive guide (published by OReilly).
So what is actionscript
Actionscript is an almost full edged programming language that allows to to control your ash
movies in a lot of ways. For instance you could use it to:
- import and control sound and pictures dynamically
- control animations- dynamically set text
- connect Flash to a database or other external data
- load new movies into an already existing movie
- create games
- create drag-and-drop actions
- etc.
The basic structure
The structure of this language is in a lot of ways similar to for instance javascript. In short that
would mean that it makes use of object, properties, events and methods (well get to that) andis written using dot-notation (well get to that also).
Theres an important difference with Javascript also. Apart from the fact that objects, properties
etc. in actionscript differ from the ones in javascript, javascript is very strict in its case-
sensitivity. Where in javascript anObject is something else than ANOBJECT or anobject,
Actionscript basics
Date: 19 september 2003
Version: as_012003
W E B - A N D M U L T I M E D I A D E S I G N
7/27/2019 Actionscript Basics
3/8
these would (for now) be the same in actionscript (almost always). That is to say; with every
new version of ash the case-sensitivity becomes more strict and will probably end up like in
javascript. Therefore its important to impose strict case-sensitivity onto yourself already; be
prepared for the future.
About objects, properties, methods and events
Actionscript is an object based programming language. What is an object in Flash? Well for
instance; a button, a movieclip, a texteld, sound, XML the movie itself! Objects themselves
are meaningless. They get their meaning through their properties, events and methods, like a
car is nothing without wheels, seats, an engine, the ability to move etc. So lets have a look at
what gives meaning
Properties
All of these objects have properties. For instance; a movieclip has the following properties:
position (dened by x- and y-coordinates [_x and _y]), alpha (transparency: _alpha), size(dened by width and height [_width and _height]) etc.
If youd have a look at the actionscript panel, youd nd more if you expand the properties. In
the reference/and or in the actionscript dictionary you can nd more info on the meaning of a
specic property. See the below image. Properties can be read and most properties can be set
also. Youll nd info on that in the dictionary and/or reference.
Example: suppose wed have a movieclip with the instancename myClip on stage. We could read
its width with the following small piece of code:
myClip._width; // reads the property and returns it
Using trace(myClip._width); would put the value to the output window.
Actionscript Basics
W E B - A N D M U L T I M E D I A D E S I G N
7/27/2019 Actionscript Basics
4/8
We could set the same property with this:
myClip._width = 100;
Textelds also have properties and one of them is text; referring to the text that is displayed in
the texteld. Suppose we have a dynamic (!) texteld with the instancename myDynamicField_
text, then we could put the text Hello World in that texteld by writing this code on the
timeline were the texteld resides:
myDynamicField_text.text = Hello World;
As you will have noticed; not all properties are written with an underscore (_). Especially the
somewhat newer properties like text for textelds have to do without them. Its a long story but
basically it this has to do with actionscript more and more adhering to a standard in scripting
languages; the socalled ECMA standard. If youre not sure about the underscore thing, check thedictionary. By the way; you wont nd any underscores in properties in the javascript language.
Javascript has been around longer than actionscript.
Methods
Methods are basically the same as functions and a function is (simply put) a command to do
something. You can recognise functions through the brackets ( ) that always come with them.
Some very basic methods are:
- play( );
- stop( );
- gotoAndPlay( );- gotoAndStop( );
Example: if wed have an animation of 20 frames on out main timeline and wed put a stop(); in
the rst frame of the timeline, then our movie would not play. The playhead would enter that
frame, read the action, and do what is required. If wed put the stop(); action in the last frame,
then our animation would play only once and stop at frame 20. Putting a gotoAndPlay(1); in the
last frame would make the movie loop endlessly.
In the previous case were gaining control over the main timeline. We could also control the
timeline of a movieclip. For instance:
myClip.play();
would tell the movieclip with the instancename myClip to play.
Every object has a specied set of methods to go with it. When you get further into actionscript
you will discover that you can elaborate on the standard methods that come with those object,
by adding/writing your own.
Actionscript Basics
W E B - A N D M U L T I M E D I A D E S I G N
7/27/2019 Actionscript Basics
5/8
Events
Actionscript not only is object-based; it is also event-based. The concept of events is quite
simple: if this happens (the event) then the following will happen (a command will be carried
out). If I turn the ignition key, my car will start (hopefully). In (fake) actionscript terms we
would write something like:
myCar.onTurnkey = carStart();
Here myCar is the object, onTurnkey the event and carStart the function or command that has
to be performed. One of the most commonly events used in ash is an event that applies both
to movieclips and buttons: onRelease. Generally when a user clicks button, something will
happen. If we would want to state what has to be done when a user clicks a button with the
instancename myButton_btn, we would write (in the rst frame of the timeline the button is
on):
myButton_btn.onRelease = function() {
trace(I clicked the button with the name myButton_btn);
}
Clicking the button would put the message I clicked the button with the name myButton_btn
to the output window.
Find out more about objects, properties, events and methods by having a peek in the
actionscript dictionary. There you will also nd simple examples that often you can easily test,
to see how it works.
About the whole timeline thing
Flash is rst of all a timeline based application. Everything and anything inside a ash movie
is a timeline. Every symbol that you have created is a timeline even if only you have used only
one frame of that timeline. Actionscript wouldnt be worth a penny if it wouldnt enable you to
control multiple timelines at the same time; if it wouldnt be able to let you control the main
timeline from within the timeline of a movieclip or the other way around.
To get a clear understanding, you must know the following. Apart from the main timeline or the
timeline of a movieclip, its good to know that each ashmovie also resides on its own level.
Flash movies can be stacked and in that stack each movie has its own level. In each level there
will always be a main timeline, which in ash is called _root. That main timeline or _root can
obviously contain other timelines, e.g. movieclip instances.
To refer to that main timeline from within a movieclip, we have two options; an absolute
reference _root (which will allow you to controll the main timeline from wherever you are, as
long as you are on the same level) or a relative reference _parent. The _parent reference will
take you one step up in the timeline heirarchy. If youd have to do two steps up, then the
syntax would be _parent._parent. Easy, right?! Also check the nal example of this little paper.
Actionscript Basics
W E B - A N D M U L T I M E D I A D E S I G N
7/27/2019 Actionscript Basics
6/8
Controlling movieclip timelines from main timeline (or _root)
We already saw that you can control the timeline of a movieclip, or a property of a movieclip,
by referring to its instancename. Using that dot-notation you are able to walk down (or up) the
hierarchy of timelines that are nested into eachother.
Example: if we would have a movieclip with the instancename myClip on our main timeline, and
we made sure that it doesnt play by adding a stop() action in the rst frame of myClip, then
this script on the main timeline:
myClip.play();
would make myClip to start playing. Similarly:
play();
would make the timeline start to play on which the action resides. So if its on the main
timeline, it would start the main timeline. If its written inside myClip, it would play myClip.
Example: if we would have a movieclip with the instance name myMainClip on the main timeline
and inside myMainClip there would be a movieclip called myNestedClip, then we could acces
myNestedClip from the main timeline with
myMainClip.myNestedClip.doWhatever();
If we are writing script on the timeline of myMainClip then we would access myNestedClip with
myNestedClip.doWhatever();
Controlling the main timeline (or _root) from within a movieclip
In some cases you want to be able to control the main timeline from within a movieclip. For
instance: you want the main timeline to continue playing when an animation inside a movieclip
has nished. So actionscript has a two ways of referring to the main timeline: _root and _
parent. The differences between these two? Where _root is an absolute reference that will always
allow you to reach the main timeline, however deeply nested the timeline is that does the call.
If youre using _parent as a reference then, this is a relative reference, that is referring to the
timeline in which the current timeline is nested. Okay lets make this clear with an example.
We have the following situation: we have a movie with a dynamic texteld called myText that
resides on the main timeline. Also on that main timeline we have a movieclip called myMainClip.
Inside myMainClip well nd the following: a button called myNestedButton and a movieclip
with an animation called myNestedAnimation.
What we want to achieve in the example
We want the button to start the animation and put the text animation is playing into the
texteld. And we also want the text animation has nished to be displayed when well, the
animation has nished.
Actionscript Basics
W E B - A N D M U L T I M E D I A D E S I G N
7/27/2019 Actionscript Basics
7/8
So lets rst have a look at the script
that controls the actions that have to
be performed when the user clicks the
button. This it what the button has to
do:
- put the text animation is playing in
the textbox
- make the animation start playing
NB Obviously youll have to put a stop()
action in the rst frame of the animation
timeline, to prevent it from starting to
play ;-).
Where do we put the action? Wellactually there are two more or less logical options options. We could put it on the main timeline,
or we could put it on the timeline where the button resides, which is inside the movieclip
myMainClip. Lets have a look at the rst option; the script on the main timeline (obviously we
prefer this to keep as much code as possible in one central location).
From main timeline:
1. myMainClip.myNestedButton.onRelease = function() {
2. myText.text = animation is playing;
3. myMainClip.myNestedClip.play();4. };
1. First we refer to the button inside the movieclip, and assign a function to the onRelease
event.
2. Then were referring to the texteld (which is on the main timeline) and adress its property
text
3. Then we adress the movieclip myNestedClip which is inside myMainClip and tell it to start
playing
4. we nish this function
But if we dont care too much about codecentralisation we could also write some code that
will perform the same, on the timeline of the movieclip myMainClip, where the button actually
resides. It then looks like this.
From the nested timeline:
1. myNestedButton.onRelease = function() {
2. _root.myText.text = animation is playing;
3. myNestedClip.play();
4. };
Actionscript Basics
W E B - A N D M U L T I M E D I A D E S I G N
myText
myMainClip
myNestedButton
myNestedAnimation
main timeline
myMainClip timeline
myNestedAnimation timeline
7/27/2019 Actionscript Basics
8/8
1. First we refer to the button that is on the same timeline as were this script is written and
assign a function to the onRelease event.
2. Then were referring to the texteld (which is on the main timeline) and adress its property
text. The texteld is one level up on the main timeline. Therefore we have to adress it with
_root (or _parent).
3. Then we adress the movieclip myNestedClip which is on the current timeline and tell it to
start playing
4. we nish this function
Now that wasnt to hard, was it? Lets nish with the nal action, that takes care of the second
requirement for this little thingie. Here youll see _parent in action more clearly. The requirement
was to put the text animation has nished in the texteld, as soon as the animation has
nished playing. The most logical place for this script would be the last frame of the animation.
So if we go to edit myNestedClip and select the last keyframe, we would write:
1 stop();
2. _root. myText.text = animation has nished;
OR
1 stop();
2. _parent._parent. myText.text = animation has nished;
Se the difference between the two? In the rst possible solution were making one huge stepto the main timeline (where the texteld is placed) using the absolute reference _root. In the
second solution were taking one step at the time using the relative reference _parent which will
take you up one step in the timeline. And as the texteld resides two steps up, we use _parent._
parent.
In this case the use of _root is perfectly ne, but suppose a situation where inside myMainClip
would be a second nested movieclip called mySecondNestedClip. From the animation
(myNestedClip), we could target that using _parent.mySecondNestedClip.
Thats it for now folks. Its not hard, but just looks hard because its a little abstract at rst. To
get a better view on what you are trying to do, its wise to draw a scheme of your application/
movie on paper, just like I did above. It will help you understand the structure of your
movie, because it will give you helicopterview. Other than that, just sit at your computer and
experiment around. And dont forget about that actionscript dictionary that comes with ash.
Good luck.
Actionscript Basics
W E B - A N D M U L T I M E D I A D E S I G N