Posts tagged ‘Flash Tutorial’
Adobe Flash CS4 Tutorial Video
Adobe Flash CS4 Tutorial Video
Learn how to use Adobe Flash CS4 from one of the world’s leading trainers, from the comfort of your own desk.
Adobe Flash CS4 Tutorial Video – Training Series
With all of the new features Adobe has added to make Flash CS4 Professional easier to learn and easier to use, there’s never been a better time to pick up the software. The object-based design model gets rid of the complicated keyframe system of previous versions and significantly lowers the learning curve for the beginner.
This powerful Adobe Flash CS4 Tutorial Video series makes mastering the program even easier. With a hands-on teaching approach based on showing and not just telling, this instructional video course covers everything from the bare basics of drawing and handling images within the program to how to use sound, video, and animation to bring your project from the idea phase all the way through publication. The unique video format of the course allows you to learn at your own pace, moving from the one tutorial to the next only when you’re ready. You’ll learn how to use all of the new features as well as the old ones, whether your focus is on animation or video, for in-house presentations or distribution on the web. Both PC and Mac compatible, it’s a convenient and affordable way to truly have the advantage with Flash CS4.
Market Advantage
Despite Microsofts’s continued efforts to develop and spread the use of its Silverlight software, Adobe’s Flash is still the king of video and animation on the web. With the additional support Flash CS4 Professional provides for H.264 video encoding and the new animation features it brings to the table, it’s sure to leverage its immense popularity (which Adobe places at 99 percent of internet users) even further.
History and the Future
Since acquiring Macromedia in 2005, Adobe has sought to make Flash more compatible with the other design tools in its product line. These integration efforts begun with Creative Suite 3 have been taken even further in Adobe Flash CS4 Professional. In addition to unifying the appearance of the user interface across the entire productivity suite, Adobe has also made transferring work between programs virtually seamless, perfect for the increasing convergence of print and web design across traditional brick-and-mortar and internet-based industries.
While keeping the core vector graphics functionality that made Flash the market leader, Adobe has added more features to Flash that will ensure its relevance as a future player in premium content markets: a new design model that is object-based and more straightforward for the Flash beginner, additional support for high quality video, more robust tools for editing large amounts of text, and the new creation tools such as the Bones utility for implementing intuitive movement and chain-effects. Brand new 3D Translation and 3D Rotation features allow you manipulate 2D objects and images in three dimensions, and the Deco tool and Spray Brush features allow you to quickly apply decorative fills to give your animations more depth and style.
Flash CS4 Tutorial – Copy Motion – Animation
Flash CS4 Tutorial – Copy Motion
Learn how to use Flash CS4 and ActionScript to create complex animations.
From Flash CS3 onwards Adobe introduced a new feature that enables users to copy timeline animation and paste it straight into the actions panel. This allows developers to cut corners when creating complex animations that aren’t so easy to create with just pure Actionscript. The pasted animation has several arrays and variables, take a look at Example 1.1 for an example. The example motions an object from the left of the stage to the right, nothing fancy just a simple animation. At first glance you’ll notice some familiar Actionscript properties such as scaleX and scaleY, these properties are what essentially make up the animation. In this article we’ll be at this technique in greater detail by adding making the code reusable by adding it to other stage objects and building a reusable class.
The files used in this Flash tutorial can be downloaded here
Example 1.1
import fl.motion.MotionBase;
import flash.filters.*;
import flash.geom.Point;
var __motion_ps:MotionBase;
if(__motion_ps == null) {
import fl.motion.Motion;
__motion_ps = new Motion();
__motion_ps.duration = 39;
__motion_ps.addPropertyArray("x", [0,5.78946,11.5789,17.3684,
23.1579,28.9473,
34.7368,40.5263,46.3158,52.1052,57.8947,63.6842,
69.4736,75.2631,81.0526,86.8421,92.6315,98.421,
104.21,110,115.789,121.579,127.368,133.158,
138.947,144.737,150.526,156.316,162.105,167.895,
173.684,179.474,185.263,191.053,196.842,
202.632,208.421,214.211,220]);
__motion_ps.addPropertyArray("y", [0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);
__motion_ps.addPropertyArray("scaleX", [1.000000]);
__motion_ps.addPropertyArray("scaleY", [1.000000]);
__motion_ps.addPropertyArray("skewX", [0]);
__motion_ps.addPropertyArray("skewY", [0]);
__motion_ps.addPropertyArray("rotationConcat", [0]);
__motion_ps.addPropertyArray("blendMode", ["normal"]);
var __animFactory_ps:AnimatorFactory = new AnimatorFactory(__motion_ps);
__animFactory_ps.transformationPoint = new Point(0.500000, 0.500000);
// __animFactory_ps.addTarget(<instance name goes here>, 0);
}
In this first part of this tutorial we’ll use the Copy Motion as Actionscript 3.0 technique to make an advertisement banner that’ll have 3 spinning adobe logos. In the download file the stage is already set up with some text and a single spinning Flash logo created on the timeline. The timeline consists of 6 layers that include actions, text, fl, ps and dw. The layer that’s important to us is the fl layer; this layer contains the Motion Tween that we’ll copy and paste into the actions panel, using the Copy Motion as Actionscript 3.0 feature.
Step 1 – Copy The Animation
The first step is to copy the animation itself, so with the very last Keyframe of the fl layer selected we drag and hold the mouse button back to the first Keyframe, highlighting every frame of the animation layer. So it looks like this;

With the frames highlighted we right click and select Copy Motion as Actionscript 3.

Step 2 – Adding The Code To Another MovieClip
Our first objective after copying the timeline animation is to paste the animation into the actions panel, we’ll then be able to add the animation to another MovieClip by making a few changes. To add this too another object in Flash CS4 is simple, near the bottom of the packaged animation you’ll find a line that’s been commentated shown in Example 2.3
Example 2.3
//__animFactory_fl.addTarget(<instance name goes here>, 0);
All that is required is to uncomment the line by deleting the 2 forward slashes then, add the instance name of the object we want to animate, and then enter the amount of times we want the animation to fire. In this case we’re animation the DW MovieClip on the stage and telling the animation to fire once.
Example 2.4
__animFactory_fl.addTarget(dw, 1);
To add the animation to more than one stage object just copy and paste the same line but add a different instance name. For example;
__animFactory_fl.addTarget(dw, 1); __animFactory_fl.addTarget(ps, 1);
This would animate the Dreamweaver and Photoshop logos.
Build a Custom Class
Now this animation may not be worth building into a custom class as it only fades and spins an object, but the techniques used to create the class will come in handy. We’ll start by creating a new actionscript file, saving it and calling it Spinner. Inside actionscript file we’ll create the bare bones of a class file.
Package{
Public class Spinner extends MovieClip{
public function spin():void
{
}
}
}
Step 2 – Pasting the Animation Code
We need to copy the animation again using the Copy as Actionscript 3.0 feature so we can paste it inside the Actionscript file. The copied animation should still be on the clipboard but we’ll repeat this anyway. Switching back to the Spinner actionscript file we paste the code below the class code, keeping it out of the way for the time being.
Step 3 –Importing Classes
We need to import the relevant classes or otherwise the animation won’t work. We already have the appropriate classes imported inside the pasted timeline animation; it’s just a matter of having them in correct part of the code. To do this we simply scroll down and copy all the classes from inside the copied timeline animation and paste them inside our package.
Package{
import fl.motion.AnimatorFactory;
import fl.motion.MotionBase;
import flash.filters.*;
import flash.geom.Point;
Public class Spinner extends MovieClip{
public function spin():void
{
}
}
}
Step 4 – Declaring the AnimatorFactory
In this next step we’ll declare the AnimatorFactory inside our class, looking at the pasted timeline animation we have an AnimatorFactory object declared inside the function. This is fine but we want to make sure we’re declaring it as an element of the class and not just the function.
Package{
import fl.motion.AnimatorFactory;
import fl.motion.MotionBase;
import flash.filters.*;
import flash.geom.Point;
Public class Spinner extends MovieClip{
var __animFactory_fl:AnimatorFactory;
public function spin():void
{
}
}
}
Step 5 – Adding the Animation
Inside the our spin() function we paste the remaining animation code.
Package{
import fl.motion.AnimatorFactory;
import fl.motion.MotionBase;
import flash.filters.*;
import flash.geom.Point;
Public class Spinner extends MovieClip{
var __animFactory_fl:AnimatorFactory;
public function spin():void
{
var __motion_fl:MotionBase;
if(__motion_fl == null) {
import fl.motion.Motion;
__motion_fl = new Motion();
__motion_fl.duration = 39;
__motion_fl.addPropertyArray("x", [0]);
__motion_fl.addPropertyArray("y", [0]);
__motion_fl.addPropertyArray("scaleX", [1.000000]);
__motion_fl.addPropertyArray("scaleY", [1.000000]);
__motion_fl.addPropertyArray("skewX", [0]);
__motion_fl.addPropertyArray("skewY", [0]);
__motion_fl.addPropertyArray("rotationConcat", [0,-66.3156,-132.631,
-198.947,-265.263,-331.579,-397.894,
-464.21,-530.526,-596.842,-663.158,
-729.473,-795.789,-862.105,-928.421,
-994.736,-1061.05,-1127.37,-1193.68,
-1260,-1326.32,-1392.63,-1458.95,
-1525.26,-1591.58,-1657.89,-1724.21,
-1790.53,-1856.84,-1923.16,-1989.47,
-2055.79,-2122.1,-2188.42,-2254.74,
-2321.05,-2387.37,-2453.68,-2520]);
__motion_fl.addPropertyArray("blendMode", ["normal"]);
__motion_fl.addPropertyArray("alphaMultiplier", [0.000000,0.026316,
0.052632,0.078947,0.105263,0.131579,0.157895,0.184210,0.210526,
0.236842,0.263158,0.289474,0.315789,0.342105,0.368421,0.394737,
0.421052,0.447368,0.473684,0.500000,0.526316,0.552631,0.578947,
0.605263,0.631579,0.657895,0.684210,0.710526,0.736842,0.763158,
0.789474,0.815789,0.842105,0.868421,0.894737,0.921053,
0.947368,0.973684,1.000000]);
var __animFactory_fl:AnimatorFactory = new AnimatorFactory(__motion_fl);
__animFactory_fl.transformationPoint = new Point(0.500000, 0.500000);
//__animFactory_fl.addTarget(<instance name goes here>, 0);
}
}
}
Step 6 – Adding this Keyword
At the bottom of the code inside our constructor function we have one final piece of code to alter. Just like earlier we uncomment the addTarget line (example 6.1) but this time instead of adding an instance name we use the “this” keyword. The “this” keyword references the object that contains the script. So basically it will animate any object that we connect to this actionscript file.
Example 6.1
//__animFactory_fl.addTarget(<instance name goes here>, 0);
Example 6.2
__animFactory_fl.addTarget(this,1);
Now Lets See The Classes In Action
Now we have our new class lets see it in action. In a new Flash file we have a square drawn out onto the stage that has been converted to a MovieClip, and then has been exported to our Spinner Actionscript class (shown in example 7.1).
Example 7.1

Inside the actions panel of the new Flash file we add the following code. This code creates an instance of our spinner class, adds it to the stage using the addChild() method and finally calls the spin() function.
var test:Spinner = new Spinner(); addChild(test); test.spin();
Beginners Flash Tutorial – Filters in AS3
For users who prefer to learn Flash visually we have a range of Adobe Flash CS3 video tutorials, this method of training greatly enhances learning and allows beginners to master even the most complex aspects of Adobe Flash with ease.
View the Beginners Flash CS3 Training Video
Beginners Flash Tutorial – Filters in AS3
Filters in Actionscript 3.0
In this beginners Flash tutorial we’ll create some filters using Actionscript 3.0. The power of Actionscript 3 allows us to create powerful filter effects and add them to any object. If you’re familiar with blend modes in graphic applications such as Photoshop you’ll recognise some of the blend modes that we’ll be looking at, if your not we’ll go through and explain exactly what each type of effect does. We’ll look at four common filters the drop shadow filter, the bevel filter, the blur filter and the glow filter. We’ll add each of these filters to four separate rectangles and go through their different properties. By the end of this Flash tutorial you will have a fundamental understanding of how to write ActionScript code to create and apply filters to dynamically created graphics and objects.
First we’ll briefly go through creating a basic rectangle for our filter effects;
We create a new Sprite object called filterEffect, this Sprite object will hold all our graphic information. A Sprite is just a movie-clip without a timeline; think of it as a container.
var filterEffect:Sprite = new Sprite();
Using the lineStyle() method we declare the outline properties of the rectangle. This method has 3 parameters available to it, thickness of the line measured in pixels, colour of the line measured in hexadecimal format and finally alpha scale that’s measured in percent (1 = 100%, .25 = 25%). In our code below we have a 2px black line with a 100% alpha property. We assign this method to graphics property of the Sprite object and assign the graphics property to our filterEffect Sprite object.
filterEffect.graphics.lineStyle(2,0x000000,1);
We use the beginFill() method to choose the colour of the rectangle. The beginFill() method has 2 parameters colour and alpha scale, for our code we’ve used a shade of red and set the alpha scale to 90%.
filterEffect.graphics.lineStyle(2,0x000000,1);
Now that we have the colour and outline properties it’s time to draw out the rectangle. Drawing the rectangle itself is pretty straight forward, using the drawRect() method we set the properties we require for the rectangle. The drawRect() method requires 4 parameters, X and Y values, and width and height. The X and Y values indicate the position of where you want to draw out the rectangle, and the width and height determine the size of the rectangle. In our code we’ve positioned the rectangle to a position of 50px by 50px and set the size to 100px by 100px.
filterEffect.graphics.drawRect(50,50,100,100);
Using the X and Y properties we set the position of the Sprite object on the stage to 50px respectively.
filterEffect.x = 50; filterEffect.y = 50;
Bevel Filter Effect
The first filter we’ll look at is the bevel filter, using the bevel filter gives objects a three dimensional effect. The bevel class allows us to customize the bevel by changing angle, blur and placement properties of the bevel. Below we’ll create a bevel filter and add it to the rectangle we have just created.
First thing we need to do is create a new bevel filter object. We’ll name this bevel object “bevel”. We can manipulate the bevel by adding some parameters; there are a number of different parameters available to us shown below. We’ll be focusing on distance and angle, the distance measures how far or much the bevel gives off a 3d effect and the angle measures the angle of the actually bevel itself. For our code below we’ve given the bevel a distance of 4.0 and a 45-degree angle.
Parameters Available
(distance:Number = 4.0, angle:Number = 45, highlightColor:uint = 0xFFFFFF, highlightAlpha:Number = 1.0, shadowColor:uint = 0×000000, shadowAlpha:Number = 1.0, blurX:Number = 4.0, blurry:Number = 4.0, strength:Number = 1, quality:int = 1, type:String = “inner”, knockout:Boolean = false)
var bevel:BevelFilter = new BevelFilter(); bevel.distance = 4.0; bevel.angle = 45;
We want to make sure that our Sprite object is using the Sprite object is using the correct filters, that means adding the “bevel” filter we’ve just created.
filterEffect.filters = [bevel];
All there’s left to do is add everything to the display list so it’s visible when the file is previewed. Using the addChild() method we add our filterEffect Sprite object to the stage.
addChild(filterEffect);
Bevel Filter Code in Full
var filterEffect:Sprite = new Sprite(); var bevel:BevelFilter = new BevelFilter(); bevel.distance = 4.0; bevel.angle = 45; filterEffect.filters = [bevel]; filterEffect.graphics.lineStyle(2,0x000000,1); filterEffect.graphics.beginFill(0x3174d0,.9); filterEffect.graphics.drawRect(50,50,100,100); filterEffect.x = 50; filterEffect.y = 50; addChild(filterEffect);
Drop Shadow Filter
We’ve already covered most the code above means, so for the next few examples we’ll just be looking at the code that we haven’t already looked at. In this example we’ll be creating another common filter effect, the drop shadow filter. In the example below we’ll create a new drop shadow object and alter some of its properties to get the effect we want.
Parameters Available
(distance:Number = 4.0, angle:Number = 45, highlightColor:Uint = 0xFFFFFF, highlightAlpha:Number = 1.0, shadowColor:Uint = 0×000000, shadowAlpha:Number = 1.0, blurX:Number = 4.0, blurry:Number = 4.0, strength:Number = 1, quality:int = 1, type:String = “inner”, knockout:boolean = false)
Just like in the previous example we create a new filter effect called dropShadow, in this case it’s a DropShadowFilter. We then add that filter effect to our Sprite object.
var dropShadow:DropShadowFilter = new DropShadowFilter();
dsEffect.filters = [dropShadow];
We’ll give our dropShadow some properties to alter the drop shadow effect. The first property we’ll give it is distance; the distance property alters the offset distance for the shadow, in pixels. The default value is 4. In our code we’ve given it a value of 50px.
dropShadow.distance = 50;
At the moment the drop shadow doesn’t look that realistic so we’ll add some blur to it using the blurX and blurY properties. The blurX and blurX properties dictate the amount of horizontal and vertical blur that’s added, valid values are 0 to 255.0 and the default value is 4.0. In our code below we’ve given the horizontal and vertical blur a value of 10.
dropShadow.blurY = 10; dropShadow.blurX = 10;
Using the alpha property we’ll change the alpha scale of the drop shadow filter to 60%.
dropShadow.alpha = .6;
Drop Shadow Filter Code in Full;
var dsEffect:Sprite = new Sprite(); var dropShadow:DropShadowFilter = new DropShadowFilter(); dsEffect.filters = [dropShadow]; dropShadow.distance = 50; dropShadow.blurY = 10; dropShadow.blurX = 10; dropShadow.alpha = .6; dsEffect.graphics.lineStyle(1,0x000000); dsEffect.graphics.beginFill(0x3174d0,.9); dsEffect.graphics.drawRect(50,50,100,100); dsEffect.graphics.endFill(); dsEffect.x = 200; dsEffect.y = 50; addChild(dsEffect);
Glow Filter Effect
The GlowFilter class lets us apply a glow effect to objects. In our example we’ll use the color and alpha properties to get the effect we want.
Parameters Available
(color:uint = 0xFF0000, alpha:Number = 1.0, blurX:Number = 6.0, blurry:Number = 6.0, strength:Number = 2, quality:int = 1, inner:Boolean = false, knockout:Boolean = false)
Like with the previous examples we create a new filter object and add it to our Sprite. In our code we create a new GlowFilter object called glow
var glow:GlowFilter = new GlowFilter(); gEffect.filters = [glow];
We’ll give our GlowFilter 3 properties color, alpha and inner. Lets take a look a closer look at these 3 properties.
The color property indicates the colour of the glow in hexadecimal format.
glow.color = 0xFFFFCC;
The alpha scale we’ve already discussed earlier, we’ve given it an alpha scale of 80%.
glow.alpha = .8;
The inner property specifies whether the object has a knockout effect, this property has 2 values, true or false. True makes the object’s fill transparent and reveals the background colour of the document and false would indicate no knockout effect. In our code we’ve given it a value of false.
glow.inner = false;
Glow Effect Filter Code in Full;
var gEffect:Sprite = new Sprite(); var glow:GlowFilter = new GlowFilter(); gEffect.filters = [glow]; glow.color = 0xFFFFCC; glow.alpha = .8; glow.inner = false; gEffect.graphics.lineStyle(1,0x000000); gEffect.graphics.beginFill(0x3174d0,.9); gEffect.graphics.drawRect(50,50,100,100); gEffect.graphics.endFill(); gEffect.x = 350; gEffect.y = 50; addChild(gEffect);
Blur Filter Effect
The blur effect allows us to add a simple blur to any object. This can be good for creating navigation hovers or used in cartoon animations for extra effect.
Parameters Available
(blurX:Number = 4.0, blurry:Number = 4.0, quality = 1)
Again we go through the same process of first creating a new BlurFilter object and assigning it to the Sprite object.
var blur:BlurFilter = new BlurFilter(); bEffect.filters = [blur];
We’ll use the blurX and blurY properties to change the horizontal and vertical blur of the object. Both properties accept value between 0 and 255, for our code below we’ve given both a value of 10.
blur.blurX = 10; blur.blurY = 10; Blur Filter Code in Fullvar bEffect:Sprite = new Sprite(); var blur:BlurFilter = new BlurFilter(); bEffect.filters = [blur]; blur.blurX = 10; blur.blurY = 10; bEffect.graphics.lineStyle(1,0x000000); bEffect.graphics.beginFill(0x3174d0,.9); bEffect.graphics.drawRect(50,50,100,100); bEffect.x = 50; bEffect.y = 200; addChild(bEffect); We hoped you enjoyed this ActionScript / Flash Tutorial.
Beginners OOP ActionScript Tutorial – part 3
For users who prefer to learn Flash visually we have a range of Adobe Flash CS3 video tutorials, this method of training greatly enhances learning and allows beginners to master even the most complex aspects of Adobe Flash with ease.
View the Beginners Flash CS3 Video Tutorial.
Instance Variables
Instance Variables are variables that are contained in each ‘instance’ of the Class; so every instance of the TextHandler Class will have it’s own TextFormat variable. Instance Variables should be initialised (given an initial value) in the constructor function, which is called whenever an Object of the Class is created. It is important, however, to refer to the instance variables outside the constructor, as in the above example, so that they are ‘visible’ to the entire Class.
Constructor Function
When you use the keyword ‘new’ to create an Object of a Class, what actually happens is that the ActionScript code within the constructor function for the Class is executed, returning an Object of the Class. The constructor function does not have to have the return type specified, as it is identified by having the same name as the Class itself.
To illustrate, imagine you wanted to create several of the TextHandler Objects, each with different formatting (i.e. different colour, font etc); you could alter the Class declaration so that the constructor function takes parameters indicating e.g. the colour, and these properties of the TextFormat object could be set within the constructor code. This way your main application code could create several different Objects of the TextHandler Class, each handling the textfields that you want to format in the same way (make the changes to your Class declaration and Flash document code):
//class code constructor
public function TextHandler(col:Number)
{
tf=new TextFormat();
tf.color=col;
}
//main code creating object
var myHandler:TextHandler = new TextHandler(0xFF0000);
To test this, place another dynamic textfield on your stage and name it other_txt, again with arbitrary text in it. Now add the following to your Flash document code:
var otherHandler:TextHandler = new TextHandler(0x0000FF); otherHandler.formatText(other_txt); //When you test the movie, other_txt should appear blue.
This trivial example may appear odd at first, but once you have gotten into the habit of thinking in terms of Objects, you’ll soon see how the techniques can save you a lot of stress. Experiment within your applications by creating Classes and Objects, with the following additional guidance:
- Functions can have as many parameters (of any datatypes) as you need, but can only have one return type; you must declare this when you devise the method (as in the stripChars function above where the return type is specified as String).
- The functions within a Class that are declared with the keyword ‘public’ are those that can be called on any Object of that type, wherever it has been created, as with the formatText method above.
- Additionally, Classes may feature private functions that are for use within the Class only; these are referred to as ‘helper’ functions and are used in much the same way as the stripChars function was in our original example. You will use such functions within your Classes where processing is repetitive or where the code contained within a function becomes overly long or complicated.
Class Overview
Look again at the (amended) version of your TextHandler Class declaration. In terms of the interface, the Class contains a constructor function (which takes one parameter of the type Number, representing the colour) and a single function for formatting text, which takes one parameter of the type textfield, and returns nothing.
Try adding more functions to the Class – e.g. add the stripChars function, using the keyword ‘public’ in front of it, then try calling it from your movie, passing it a String as in the original example.
In theory, the TextHandler Class could have been created by someone else and you could still use it as long as you know: what the Class is for, what the functions are called (and what their purpose is), what parameters they take, and what data they return, if any. If you think about it, this is all you know about the built-in Classes that you use regularly.
The ‘interface’ can also be made more explanatory through the use of documentation and comments, as is the case with the built-in Classes. You can see an example of this with the official Adobe documentation for the TextFormat Class in ActionScript 3.0 here: http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/text/TextFormat.html
- this gives you limited insight into the TextFormat Class declaration.
As with the stripChars helper function example above, if at any stage during your development process, you decide to change any of the implementation details within your Classes’ functions, you should be able to do so without upsetting any other code, as long as your interface remains the same. e.g. If you decided to change the for loop in the stripChars function to a while loop (for whatever reason) it wouldn’t affect the rest of the code, as long as it performs the same function.
Summary
The Object Oriented design method is a good way to achieve well-organised applications, but the success of the technique does depend strongly on Classes being defined in a clear manner. If you’re struggling at all to grasp the technical notions, have a try at using Classes anyway; as long as you stick to the principles outlined above, you should be able to define and create useful Objects.
It can be challenging to understand these notions when you’re starting out as a programmer and have built only relatively small applications. However, even where you are developing applications single-handed, Object Oriented design can make for efficient programs that are easily manageable.
If you’re interested in exploring Object Oriented development further, advanced areas to study include: Packages; Inheritance; Polymorphism; Interfaces; Abstract Classes.
Beginners ActionScript Object Oriented Programming part1
For users who prefer to learn Flash visually we have a range of Adobe Flash CS3 video tutorials, this method of training greatly enhances learning and allows beginners to master even the most complex aspects of Adobe Flash with ease.
View the Adobe Flash CS3 Tutorial.
Object Oriented Programming with ActionScript – part 1
As your Flash applications grow more complex, relying on substantial amounts of ActionScript code, efficiency will become more of an issue. Applications that use well-organised code are more reliable, and lend themselves better to future extension. One approach to developing such systems is Object Oriented design, which we will explore in this tutorial. Even if you’re new to the concept of Object Oriented design, you may find that you have already adopted some of the techniques on which it is based.
The Concept of OOP with ActionScript
You will likely already have used Objects in your ActionScript code whether you’re aware of it or not. For example, your code may have used the TextFormat class:
var tf:TextFormat = new TextFormat();
In this example, we create a new Object of the Class TextFormat. This means that the Object has the properties and behaviour that are defined in the TextFormat Class declaration. This Class is part of ActionScript itself, and you can therefore create and use TextFormat Objects just by inserting the single line above. With Object Oriented design, you will be designing your own Objects, by creating Class declarations for them in ActionScript, then importing them into your Flash for use there.
The concept of Object should be familiar to you if you have used Library items and Symbols in Flash. When you create a MovieClip, for example, and define what happens within it, the MovieClip symbol in your library is like a blueprint or prototype for that kind of Symbol. When you then use instances of the MovieClip Symbol within your Flash movie itself, each of these instances has the properties and behaviour that you defined when you created the MovieClip originally. This process is analogous to what you’ll do with your ActionScript Classes. The Class declaration is where you define the properties (in ActionScript) that any instances of the Class will have when you create them, as with the TextFormat object above.
Well-organised code
The reason for adopting any design methodology is to produce applications that are reliable, efficient and easy to perform future amendments or extensions upon. This is similarly the case with Object Oriented development. To begin, we will look at some of the simple efficiency measures that you can take during your regular programming routine, and demonstrate how these form the basis for the Object Oriented approach.
There are many techniques to achieving well-organised code when creating Flash applications. The simple act of including plenty of comments and whitespace in your code makes for a component that is easier to debug and extend. Similarly, organising your code into sensible chunks of related processing is helpful. When doing this, creating what are referred to as ‘helper’ functions (something that you may have already done), illustrates the basic principle behind Object Oriented design.
Let’s look at a simple example. When you are writing ActionScript code, you will often find that you are carrying out similar processes repetitively. When this is the case, you should consider creating functions to carry out those processes, effectively allowing you to cut down on the amount of code you need to achieve the same functionality. Imagine you have a Flash movie that contains several text Strings whose content varies, maybe the text is being imported from some external file which has unpredictable content. You have decided that you don’t want to display any content that isn’t alphanumeric, i.e. you only want letters and numbers. For this reason you will have to perform text processing on each of the Strings before you display them. Your code might look like this (feel free to paste this into a Flash document to try it out – don’t worry too much about the String processing code if it’s unfamiliar to you, the details are unimportant, but pay attention to the overall structure of the code):
//strings - nonsense var first_str:String="kdfHGKj kkv e$ deagf% /.;fghlkjsf'h'"; var second_str:String="bcn'l;gH;'(fghsf "; var third_str:String="bcnf..,\\gj[] *dFG"; //strip out non alphanueric from first var firstStripped_str:String=""; for(var i:Number=0; i="0" && ch<="9") || (ch>="a" && ch<="z")) firstStripped_str+=first_str.charAt(i); } trace(firstStripped_str); //strip out from second var secondStripped_str:String=""; for(var j:Number=0; j="0" && ch<="9") || (ch>="a" && ch<="z")) secondStripped_str+=second_str.charAt(j); } trace(secondStripped_str); //strip third var thirdStripped_str:String=""; for(var k:Number=0; k="0" && ch<="9") || (ch>="a" && ch<="z")) thirdStripped_str+=third_str.charAt(k); } trace(thirdStripped_str);
This can be easily improved by making a ‘parameterised’ function, meaning a function that will carry out the same processing but which takes the Strings as parameter, making it adapt to each different circumstance:
//strings - nonsense
var first_str:String="kdfHGKj kkv e$ deagf% /.;fghlkjsf'h'";
var second_str:String="bcn'l;gH;'(fghsf ";
var third_str:String="bcnf..,\\gj[] *dFG";
function stripChars(my_str:String):String
{
var stripped_str:String="";
for(var c:Number=0; c="0" && ch<="9") || (ch>="a" && ch<="z"))
stripped_str+=my_str.charAt(c);
}
return stripped_str;
}
trace(stripChars(first_str));
trace(stripChars(second_str));
trace(stripChars(third_str));
Notice how much more concise the code is – test the movie to check that both versions of the code have the same effect. What you have done is to give the function ‘responsibility’ for the text processing. One of the advantages to doing this is that, if you decide to change the process in any way, you only have to do it in one place (within the function) – this is a single ‘point of change’. Eventually, when you have gotten into the habit of thinking this way when writing your code, you will start to anticipate the practice, rather than carrying it out retrospectively, and will save yourself a lot of time and effort in doing so.
While the above technique does make the code more efficient, it is still ‘procedural’ rather than Object Oriented in structure. Procedural programs are basically a series of instructions being executed in turn. When the movie is run, the code listed on the main timeline is executed in a linear fashion, i.e. each line is processed one after the other until the machine is instructed otherwise. To adopt Object Oriented design, we need to extend the notion of creating ‘helper’ functions, and to develop ‘helper’ Objects to carry out the processing within a movie. In the same way that we allocated the text-processing responsibility to a function, we can assign responsibility for the individual parts of an application to Objects – we can ‘delegate’.





