How To: Access properties of MovieClip/Sprite/DisplayObject instances from within a class in ActionScript 3

When it comes to programming, the devil is always in the details. In this case, I just wanted to add a MovieClip to the stage in a flash file, and then access that MovieClip’s instance properties to control some other instance stuff from within a class. Sounds simple, right? But could I do it? Could I ****. If you’re reading this, then there’s a good chance you’re in the same boat. Luckily for us both, it’s not too difficult to do at all. Here’s some simple proof of concept code to help you along:

Note: This first example uses a class called Ball. If you want to see it in action either download my pre-made code (Adobe Flash CS4 format), or just draw a circle or something, select it, convert to symbol (shortcut key: F8), tick the “Export for ActionScript…” checkbox and give it a class name of “Ball” (capital B) then use the following code to access instance properties of a given Ball object from within the class itself.

Main Flash File (.fla) Code

Ball.as ActionScript File Code

The trick is that we keep a reference to (or really a copy of) the main flash file’s stage handy by passing it into the constructor, so we can refer to it and get at any instances of anything on that stage to work with. Also, if we’re getting an instance by name, then we have to set the .name property! I thought you could just get it by the instance name itself (as in, the variables own name, not it’s .name property), but apparently not.

You might wonder why go to all this effort when we could just call this.x instead of ballStage.getChildByName(“SOME_NAMED_DISPLAYOBJECT”) or such in the above code, but the reason is that by jumping through these extra hoops we can access the properties of instances of other classes inside any other class. For example, if I had a Football class and a Player class, I could access the properties of a Football instance on the stage from within the Player class, or vice-versa.

To show a more concrete example, try using the cursor keys to move the attractor (just an instance of a MovieClip on the stage) around the below – the particles interact with the location of the attractor MovieClip, because I grab a copy of it by name (which is slower than by index from what I read, but this is just an example) and then move each particle instance from that information in the Particle class:

Full source for the above keyboard attraction example can be found: here.

Cheers!

An introduction to ActionScript 3.0 – week 8

In week 8 of the ActionScript intro we move on to collision detection and using hitTestObject to find out if two objects overlap, and what we should do about it if they have!

In this bundle I’ve combined both Week 8 Lessons 1 and 2 into a single document and provided the full source code to the exercises, but it’s recommended that you work through it yourself instead of just copying and pasting the code. I know typing in code isn’t fun, but by typing it rather than pasting it you get a far better idea of how everything fits together and you’re forced to think about the code and what it’s doing a lot more.

By the end of this tutorial, you’ll be able to build a simple Breakout/Arkanoid clone like this:

I’m not saying that it’s a fun game, but it’s starting to shape up – we’ve got functions, graphics, input and some basic collision detection. These are the tools you need to be able to write a proper game! We’re making progress! =D

Download link: An Introduction to ActionScript 3.0 – Week 8 (both lessons combined)
Audience: Beginners who know a little about variables, functions, objects and how to perform some basic programming math. You’re going to have to focus for this one – but you can do it!
Format: PDF
Content License: The document, its contents and the provided source code are released under a creative commons non-commercial attribution share-alike 3.0 license by me (r3dux) and comes with no guarantee of correctness, fitness for purpose or anything of the sort. The background was sourced randomly from the Internet last year and I’d be happy to add a correct attribution or remove it if it’s yours.

I’ve tarted up the breakout game above (from its more basic state as included in the download pack) to wait for a mouse click before starting, reset on click, and also reset when you lose the ball or break all the blocks, plus I’ve added a change in ball speed dependent on whether the ball hits the left or right side of the bat. The updated flash file can be found here – however, be warned that ALL THE CODE is in the same file, and it’s just bodged together to keep things as simple as possible while actually doing something vaguely useful. What I’m saying is – don’t write your stuff this way. When you write your awesome code use classes and methods and public/private access restrictions and do things properly! Also, faking mouse events is a sure sign of badly designed code, okay? I just used it to keep the code size down.

Honest ;)

An introduction to ActionScript 3.0 – week 7

Week 7 of the ActionScript intro yet again carries on with the theme of coding rather than just talking about coding and yet again comes as a document instead of slides. All the text output we’ve been using so far has been to the debug console, which a.) is only useful for debugging, b.) is only visible in a web browser to people using the debug version of the flash plugin and c.) looks rubbish. So to remedy this, we’ll be looking at TextFields and TextFormats, and how we can use them to display text of any size, colour, font, orientation etc, and even generate random text formats.

In this bundle I’ve combined both Week 7 Lessons 1 and 2 into a single document and provided the full source code to the exercises, but it’s recommended that you work through it yourself instead of just copying and pasting the code, ya dig?

By the end of this tutorial, you’ll be able to build a font clock like this, not that you’d particularly want to (because this melon is for display purposes only =P) – but you get the gist:

That’s got to just about cover most of the things you might want to do with text (i.e. choose a font, a colour, a size, a location, and an orientation).

Download link: An Introduction to ActionScript 3.0 – Week 7 (both lessons combined)
Audience: Beginners who know a little about variables, functions, objects and how to perform some basic programming math.
Format: PDF
Content License: The document, its contents and the provided source code is released under a creative commons non-commercial attribution share-alike 3.0 license by me (r3dux) and comes with no guarantee of correctness, fitness for purpose or anything of the sort. The Adobe Quickstart PDF was printed from content created and owned by the Adobe Corporation and the subway font used in the font-embedding example was created by Johan Waldenstrom (great font, Johan!).

Comments & feedback always welcome.

An introduction to ActionScript 3.0 – week 6

Week 6 of the ActionScript intro carries on with the theme of coding rather than just talking about coding and as such again comes as a word document instead of slides. This week is where we start to have some fun with classes and dynamic creation of symbol instances. We start off by binding a bubble image to a simple class, and then tie it into the mouse cursor position, add in some colour transforms to liven things up and and stop our instances from giving you eye cancer by making them fade in and out through some manipulation of the each instance’s alpha property.

In this bundle I’ve combined both Week 6 Lessons 1 and 2 into a single document and provided the full source code to the exercises, but I highly recommend that you either start from scratch using the document as a guide or work from the 1st example source code and only peek at the completed source code if you get stuck because if you’re reading this then you want to learn to code, and you’re not going accomplish that by copying and pasting alone.

By the end of this tutorial, you’ll be able to build this:

Not a bad starting point for moving onto some way cooler stuff, eh?

Download link: An Introduction to ActionScript 3.0 – Week 6 (both lessons combined)
Audience: Beginners who know a little about variables, functions, objects and how to perform some basic programming math.
Format: PDF
Content License: This material is released under a creative commons non-commercial attribution share-alike 3.0 license by me (r3dux) and comes with no guarantee of correctness, fitness for purpose or anything of the sort.

Comments/feedback always welcome.

Bonus: You can find the code for the above animation with the start/stop on click code here.

An introduction to ActionScript 3.0 – week 5

Week 5 of the ActionScript intro is a practical exercise-writin’ affair with lots of assistance provided. When I first delivered this material last year I wanted to stop talking about programming and get the students actually using ActionScript and getting the hang of writing and debugging their code, so I switched from slides to A4 hand-outs with exercises. Unfortunately, many of them hadn’t had enough practice or paid enough attention in class, so for the second class I wrote a document explaining where many students were going wrong when attempting the exercises in class – how to correctly use brackets, functions with/without parameters and return types, pushing and popping data to/from arrays etc.

In this bundle, I’ve reversed the order so that Lesson 1 is the “where-did-I-go-wrong” part, and Lesson 2 is the exercises to try out your ActionScript skills – feel free to take on the exercises first if you’re feeling confident.

Introduction to ActionScript 3 - Week 5

Download link: An Introduction to ActionScript 3.0 – Week 5 (both lessons combined)
Audience: Beginners who know a little about variables, functions, objects and how to perform some basic programming math.
Format: PDF
Content License: This material is released under a creative commons non-commercial attribution share-alike 3.0 license by me (r3dux) and come with no guarantee of correctness, fitness for purpose or anything of the sort.

Feedback, as always, is very welcome.