Foundation ActionScript 3 Second Edition Darren Richardson Paul Milbourne
Foundation ActionScript 3
Second Edition
Darren Richardson
Paul Milbourne
Foundation ActionScript 3, Second Edition
Copyright 2014 by Darren Richardson and Paul Milbourne
This work is subject to copyright. All rights are reserved by the Publisher, whether the whole or part of the material is concerned, specifically the rights of translation, reprinting, reuse of illustrations, recitation, broadcasting, reproduction on microfilms or in any other physical way, and transmission or information storage and retrieval, electronic adaptation, computer software, or by similar or dissimilar methodology now known or hereafter developed. Exempted from this legal reservation are brief excerpts in connection with reviews or scholarly analysis or material supplied specifically for the purpose of being entered and executed on a computer system, for exclusive use by the purchaser of the work. Duplication of this publication or parts thereof is permitted only under the provisions of the Copyright Law of the Publishers location, in its current version, and permission for use must always be obtained from Springer. Permissions for use may be obtained through RightsLink at the Copyright Clearance Center. Violations are liable to prosecution under the respective Copyright Law.
ISBN-13 (pbk): 978-1-4842-0585-3
ISBN-13 (electronic): 978-1-4842-0583-9
Trademarked names, logos, and images may appear in this book. Rather than use a trademark symbol with every occurrence of a trademarked name, logo, or image we use the names, logos, and images only in an editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the trademark.
The use in this publication of trade names, trademarks, service marks, and similar terms, even if they are not identified as such, is not to be taken as an expression of opinion as to whether or not they are subject to proprietary rights.
While the advice and information in this book are believed to be true and accurate at the date of publication, neither the authors nor the editors nor the publisher can accept any legal responsibility for any errors or omissions that may be made. The publisher makes no warranty, express or implied, with respect to the material contained herein.
Managing Director: Welmoed SpahrLead Editor: Ben Renow-ClarkeTechnical Reviewer: Jason SturgesEditorial Board: Steve Anglin, Mark Beckner, Ewan Buckingham, Gary Cornell, Louise Corrigan,
Jim DeWolf, Jonathan Gennick, Robert Hutchinson, Michelle Lowman, James Markham, Matthew Moodie, Jeff Olson, Jeffrey Pepper, Douglas Pundick, Ben Renow-Clarke, Dominic Shakeshaft, Gwenan Spearing, Matt Wade, Steve Weiss
Coordinating Editor: Christine RickettsCompositor: SPi GlobalIndexer: SPi GlobalArtist: SPi GlobalCover Designer: Anna Ishchenko
Distributed to the book trade worldwide by Springer Science+Business Media New York, 233 Spring Street, 6th Floor, New York, NY 10013. Phone 1-800-SPRINGER, fax (201) 348-4505, e-mail [email protected], or visit www.springeronline.com. Apress Media, LLC is a California LLC and the sole member (owner) is Springer Science + Business Media Finance Inc (SSBM Finance Inc). SSBM Finance Inc is a Delaware corporation.
For information on translations, please e-mail [email protected], or visit www.apress.com.
Apress and friends of ED books may be purchased in bulk for academic, corporate, or promotional use. eBook versions and licenses are also available for most titles. For more information, reference our Special Bulk SaleseBook Licensing web page at www.apress.com/bulk-sales.
Any source code or other supplementary material referenced by the author in this text is available to readers at www.apress.com. For detailed information about how to locate your books source code, go to www.apress.com/source-code/.
http:/[email protected]://www.springeronline.comhttp://[email protected]://www.apress.comhttp://www.apress.com/bulk-saleshttp://www.apress.comhttp://www.apress.com/source-code/
iii
Contents at a Glance
About the Authors xvii
About the Technical Reviewer xix
Layout Conventions xxi
Chapter 1: Getting Started with ActionScript 30 1
Chapter 2: ActionScript 30 Fundamentals 23
Chapter 3: Objects and Classes 67
Chapter 4: Working with the Display 101
Chapter 5: Creating Vector Graphics with the Drawing API 151
Chapter 6: User Interaction and More with Events 185
Chapter 7: Working with Video 223
Chapter 8: Using Audio 271
Chapter 9: Working with Components 319
Chapter 10: Regular Expressions 369
Chapter 11: Using XML 391
Chapter 12: Case Study: Creating a Dynamic Image Viewer 407
Chapter 13: Getting Started with Flex 441
Chapter 14: Flex by Example 463
Index 521
v
Contents
About the Authors xvii
About the Technical Reviewer xix
Layout Conventions xxi
Chapter 1: Getting Started with ActionScript 30 1
A Brief History of ActionScript 1
The Rise of ActionScript 30 2
ActionScript and Object-Oriented Programming 3
The Development Process 4
Organizing Your Files 6
Adding ActionScript to Your Projects 7
Placing Code on the Timeline 7
Importing Code from an External File 9
Specifying a Document Class 11
Linking Library Assets to External Classes 12
Bouncing Balls 15
Creating the Flash File 15
Creating the Ball Class 17
Adding More Balls 19
ActionScript in Action 21
Summary 21
Contents
vi
Chapter 2: ActionScript 30 Fundamentals 23
Statements and Expressions 24
Introducing Variables 25
Assigning a Value to a Variable 25
Retrieving the Value of a Variable 26
Naming Your Variables 28
Understanding Data Types 29
Using Constants 32
Performing Operations 32
Arithmetic Operators 33
Specifying Precedence 34
String Operations 34
Unary Operations 35
Introducing Arrays 36
Manipulating Arrays 38
Vectors vs Arrays 39
Understanding Type Checking 41
Making Decisions 41
Introducing the if Statement 41
Forming Boolean Expressions 43
Booleans in Conditionals 44
Using Logical Operators 45
Looping the Loop 47
The while loop 47
The do while loop 50
The for Loop 50
Looping through an Array 51
More for Loops 52
Breaking Out of a Loop 52
Looping through a Vector 53
Contents
vii
Introducing Functions 53
Creating a Function 54
Returning a Value from a Function 55
Using Function Parameters 57
Providing a Default Value for Function Parameters 58
Allowing for Variable Parameters 59
Passing Values and References 60
Function Scope 62
Commenting Your Code 63
Bad vs Good Comments 64
Commenting for Documentation 64
Summary 65
Chapter 3: Objects and Classes 67
iPod Analogy 67
Working with Objects 68
Creating Objects using the New Operator 68
Accessing Properties and Calling Methods 69
Copying Objects 70
Casting Objects to a Type 71
The Object Object 73
Iterating Over Objects 74
Dictionaries vs Objects 76
Native JSON 77
Creating Your First Class 77
Choosing Suitable Names for your Classes 79
Adding Properties 79
Adding Methods 81
Initializing Your Objects with a Constructor Method 84
Contents
viii
Controlling Access to Properties and Methods 85
Adding Getter/Setter Methods 87
Creating Read-Only Properties with Getter Methods 90
Static Properties and Methods 90
Taking Advantage of Inheritance 91
Overriding Methods of the Base Class 95
Using Packages to Group Your Classes 96
Naming Your Packages 97
Importing a Class from a Package 99
Importing all Classes in a Given Package 99
Resolving Naming Conflicts among Imported Classes 99
Removing Dependency on Timeline Code 100
Summary 100
Chapter 4: Working with the Display 101
Introducing the Display List 101
Working with Display Objects 105
Manipulating Display Objects 109
Managing Depth 113
Creating new Display Objects 119
Removing Display Objects from the Display List 120
Specifying Bl Modes 121
Working with Filters 122
Applying a Filter to a Display Object 123
Applying Filters in a Specific Order 127
Making Changes to an Existing Filter 129
Removing an Existing Filter 132
Introducing the Advanced Filters 134
Accessing the Stage 135
Using Stage Properties 135
Making a Movie Full Screen 136
Contents
ix
Using Library Resources 141
Loading from External Files 143
Loading an External Asset 143
Manipulating the Loaded Asset 145
Making Things Move 146
Copying Animation from the Timeline 146
Animating other Properties 150
Summary 150
Chapter 5: Creating Vector Graphics with the Drawing API 151
Why we Need a Drawing API 151
Understanding the Drawing API153
Setting up Mr Smiley 154
Drawing Lines 156
Creating Straight Lines 156
Controlling the Line Style 158
Drawing Curved Lines 160
Drawing and Filling Shapes 161
Drawing Primitive Shapes 161
Creating Custom Shapes 164
Filling Shapes with a Solid Color 165
Filling Shapes with Color Gradients 167
Simplifying the Code 172
Creating Gradient line Styles 174
Flash 3D 179
Summary 183
Chapter 6: User Interaction and More with Events 185
Understanding Events 185
Listening for an Event 186
Removing an Event Listener 187
Naming Your Event Listener Methods 188
Contents
x
Creating a Simple Drawing Application 188
Using One Event Listener for Multiple Objects 194
Using Events with the Display List 195
Handling Single and Double Mouse Clicks 195
Handling Mouse Hover States 199
Handling Key Presses 205
Preventing an Events Default Action 214
Capturing and Bubbling: The Event Flow 218
Listening for Events in the Bubble Phase 219
Listening for Events in the Capture Phase 219
Stopping an Event from Propagating 220
Removing Capture Phase Event Listeners 221
Summary 221
Chapter 7: Working with Video 223
Video on the Modern Web 223
The Video Experience 223
Where ActionScript Comes in 224
Encoding Your Video 225
Capturing Your Video 225
Using the Flash Video Encoder 227
Delivering Your Video 231
Using ActionScript to Play Videos 234
Managing Connections with the NetConnection Class 234
Loading and Controlling Video with the NetStream Class 236
Creating Video Objects with the Video Class 239
Creating Camera Objects with the Camera Class 240
Handling Video Events 242
Contents
xi
Building a Video Player 246
Setting up the Project 248
Controlling the Video Player 252
Controlling the Video on the Stage 257
Creating a Custom Event 270
Summary 270
Chapter 8: Using Audio 271
Importing and Converting Sound Files 271
Using iTunes 271
Using Adobe Audition 274
Using ActionScript to Play Sound 274
Accessing Sound Files with the Sound Class 275
Controlling Sound Channels with the SoundChannel Class 276
Doing Security Checks with the SoundLoaderContext Class 276
Controlling Volume and Panning with the SoundTransform Class 276
Controlling Sounds Globally with the SoundMixer Class 277
Getting ID3 Data with the ID3Info Class 277
Using a Microphone with the Microphone Class 278
Understanding the Basics of a Sound Player Application 279
Building a Sound Player 289
Setting up the Project 290
Adding Display Items 295
Controlling the Audio as it Plays 299
Controlling the Sound Volume and Panning 308
Creating the Custom Event Class 318
Summary 318
Contents
xii
Chapter 9: Working with Components 319
Just What are Components? 319
Accessing Your Components 320
Adjusting Component Parameters 322
Benefits of Working with Components 325
Exploring the Flash Component Framework 326
UI Components 326
Video Components 328
Going Behind the Scenes 330
Finding the Files 332
Scripting Interaction 339
Adding the Components 339
Adding the ActionScript 341
Styling and Skinning 346
Styling Components 346
Skinning using the Timeline 349
Skinning using Classes 353
Creating Components from Scratch 357
Creating the Widget 357
Writing the Component Code 359
Turning the Symbol into a Component 365
Testing the Component 366
Using Third-Party Components 368
Summary 368
Chapter 10: Regular Expressions 369
Why you Need Regular Expressions 369
Introducing the RegExp Class371
Anatomy of a Regular Expression Pattern 372
Introducing Metacharacters 373
Providing Alternatives with Alternation 375
Contents
xiii
Using Character Classes and Character Ranges 375
Matching any Character using the Dot Metacharacter 376
Matching a Number of Occurrences Using Quantifiers 377
Grouping Patterns 380
Accessing Matched Strings with Backreferences 381
Understanding the E-Mail Regular Expression- Pattern 383
Changing Regular Expression Behavior with- Modifiers 384
Using the Case-Insensitive Modifier 385
Using the Global Modifier 385
Using the Multiline Modifier 387
Using the Dotall Modifier 387
Using the Extended Modifier 387
Using Variables to Build a Regular Expression 388
Useful Regular Expressions 388
Regular Expression Resources 389
Summary 389
Chapter 11: Using XML 391
Understanding XML and E4X 391
XML Document Components 392
E4X 393
Accessing an XML File 393
Creating an XML Object 394
Loading an XML File 394
Getting XML from a Remote Source 396
Reading the XML 396
Reading the Root Node 396
Reading Elements in an XML Tree 396
Reading an XML Elements Attributes 397
Contents
xiv
Searching XML 398
Searching for an Attribute or Element at any Level 399
Reading Text Nodes 401
Modifying XML 402
Adding Elements to an XML Object 402
Removing Elements and Attributes from an XML Object 405
Summary 405
Chapter 12: Case Study: Creating a Dynamic Image Viewer 407
An Overview of the Image Viewer 408
Laying out the Interface 409
Creating the Document Class 414
Loading Image Data 419
Loading the XML 421
Parsing the Data 422
Accessing the Data 424
Displaying Images 425
Handling Image Selection 428
Scaling an Image 429
Adding Graphic Enhancements 430
Changing the Image Label 430
Improving the Thumbnail Layout 431
Adding Drop Shadows 433
Creating an Animated Transition 435
Summary 439
Chapter 13: Getting Started with Flex 441
Introducing Flex 441
Understanding Rich Internet Applications 441
Meet the (Flex) Family 442
The Flex Framework 442
The Flash Player 442
Contents
xv
MXML 442
The Flex Software Development Kit 443
Flash Builder 443
Adobe LiveCycle DS 443
Adobe AIR 444
Getting Started with the Flex SDK 444
Installing the Flex SDK 444
Finding a Suitable Editor 448
Building your first Flex Application 448
Getting Started with Flash Builder 452
Understanding the Flash Builder Interface 452
Building your first Flash Builder Application 453
Summary 461
Chapter 14: Flex by Example 463
Planning the Application 463
Gathering the Requirements 464
Creating the Functional Specification 465
Designing the UI 466
Designing the Interaction 466
Designing the Data and Logic 467
Setting up the Project 467
Creating the Basic UI 469
Creating the Containers 469
Creating Basic Feed Integration 470
Installing the XML Syndication Library 471
Creating the Subscription Class 475
Adding a New Class to Your Project 475
Fleshing out the Subscription Class 477
Testing the Subscription Class 479
Loading the Data 480
Allowing Subscription Instances to be used for Data Binding 484
Contents
xvi
Creating the Subscriptions List 487
Creating the Articles Data Grid 490
Populating the Article Panel 493
Completing the Subscriptions Panel 494
Allowing Users to Subscribe to a Feed 494
Allowing Users to Unsubscribe from a Feed 505
Saving the Subscriptions List Between Sessions 505
Refreshing the Subscriptions List 508
Completing the Articles and Article Panels 511
Finishing the Articles Panel 511
Finishing the Article Panel 516
Improving the Feed Reader 518
Summary 519
Index 521
xvii
About the Authors
Darren Richardson became a Flash addict way back in 1999 when he started the now-deceased actionscripts.co.uk. Since then he has worked in a number of creative agencies as a technical director. He is currently in the same position at de-construct. Darren has written a large number of articles for two popular web magazines, Practical Web Projects and Web Designer, and now writes on a regular basis for Web Designer Magazine on the subject of Flash and ActionScript. Darren is also the technical editor for a couple of books by Apress.
In his spare time, he blogs at www.playfool.com/blog on the subject of all things digital and creates web sites, iPhone apps, and online branding solutions on a freelance basis
Paul Milbourne has been a software developer in the Washington-Baltimore metropolitan area for over decade. His journey as allowed him to work with such clients as the Washington Redskins, Baltimore Ravens, Zynga Games and many others.
For the most part, Paul has made a handsome career putting out fires and dealing with edge cases. This experience has exposed him to most aspects of development through a multitude of industries and platforms.
Paul is also a former chef, avid musician, and a practicing fine artist.
http://www.playfool.com/blog
xix
About the Technical Reviewer
Jason Sturges is a cutting edge creative technologist focused in ubiquitous delivery of immersive user experiences. Coming from a visualization background, hes always been taken by computer graphics and was immediately drawn to the dynamic runtime of the Flash platform and ActionScript Virtual Machine to bring designs to life while supporting different media with consistent user experience cross-platform to multiple devices. From interactive graphics, animations, and creative design, he has worked with numerous creative agencies on projects from kiosks to video walls to Microsoft Kinect games. Most recently the core of his work has been mobile, developing applications for top tier media tiles.
Committed to the open source community, he is also a frequent contributor to Stack Overflow. As a top answerer of ActionScript questions, he is a community resource leveraging modern standards, solid design patterns, and best practices in multiple developer tool chains for web, mobile, and desktop apps.
xxi
Layout Conventions
To keep this book as clear and easy to follow as possible, the following text conventions are used throughout.Important words or concepts are normally highlighted on the first appearance in bold type.Code is presented in fixed-width font.New or changed code is normally presented in bold fixed-width font.Menu commands are written in the form Menu Submenu Submenu.Where I want to draw your attention to something, Ive highlighted it like this:
Ahem, dont say I didnt warn you.
Sometimes code wont fit on a single line in a book. Where this happens, I use an arrow like this:
This is a very, very long section of code that should be written all onthe same line without a break
Contents at a GlanceContentsAbout the AuthorsAbout the Technical ReviewerLayout Conventions