Indispensable Plugin for FlashBuilder: Flex Formatter

Flex Formatter is an extremely useful plugin for FlexBuilder / FlashBuilder that formats your ActionScript code (AS3) and MXML according to a broad range of settings, and helps you to generate ASDoc comments automatically. It is free, and open source.

It’s code formatting is quite robust and configurable, handling things like brace settings (cuddling versus next line), white space around parameters and operators, sorting imports, and a ton more. Thankfully, you can export your settings to a file and share it with your whole team. You can also have it automatically update settings from a file that you can share over the network or via SVN / GIT.

Unfortunately, it’s ASDoc features are much more rudimentary, and do not have any configuration options. They serve as an acceptable starting point, and save some time, but I would love to see some additional support here (for example, an option to mark private and or protected members as @private, which is a very common requirement).

Regrettably, Flex Formatter does not seem to come with installation instructions. If you are not familiar with installing Eclipse plugins, it can take a lot of work to figure it out, but it’s very simple if you know how to do it:

  1. Start up FlexBuilder / FlashBuilder.

  2. From the Help menu, select ‘Software Updates > Find and Install…’

  3. Select ‘Search for new features to install’ and click ‘Next >’

  4. Click ‘New Remote Site…’

  5. Use name: ‘Flex Formatter’ and url: ‘http://flexformatter.googlecode.com/svn/trunk/FlexFormatter/FlexPrettyPrintCommandUpdateSite/’

  6. Click OK

  7. Make sure only ‘Flex Formatter’ is selected in the ‘Sites to search’ list, and click ‘Finish’

  8. Follow the prompts to install Flex Formatter, and restart the IDE

Once you’ve restarted, you should see the Flex Formatter bar with buttons to ASDoc, format, and rearrange your code. You should also have a ‘Flex Formatting’ entry in preferences.

If you’d like, you can import my settings for Flex Formatter. You can download them by clicking here, unzip them, and import them using the ‘import…’ button at the bottom of Flex Formatter’s preferences.

Flex Formatter’s project home is here and you can find documentation on it’s settings here.

Wander Motion Class Update

I just uploaded an update to the Wander motion class I released a couple weeks ago.

This version has some new features that I’ve added as I needed them, like:

  • targetObject: set the Wander to use the x/y of another display object as it’s target x/y. There are lots of possibilities with this: you can follow another wandering sprite, follow a sprite moving in a completely different way (ex. a bouncing ball), or even follow a sprite that was tweened in the timeline or via a tweening library.
  • rotationLimit: sets a limit on the maximum amount that the rotation can change in a single update of the wander. You can use this to get nice smooth arcs and more gradual responses (particularly when using targetObject).
  • update(): you can set autoUpdate (which replaces paused) to false, and call update directly if you have a central tick dispatcher.
  • getShortRotation(): exposed this helper method for general use.
  • always operates on the target’s current rotation. Now you can change the rotation between updates, and Wander will use the new rotation properly.
  • oldRotation: stores previous rotation value.
  • fixed a couple of minor issues.
  • included FLAs for the demos.

Continue reading →

AS3 ProximityManager V2

Mike Chambers recently hosted a contest to write a faster version of my AS3 ProximityManager class (which was a lazy port of my AS2 version). Many of the results were blazing fast, but not really suited to or optimized for real-world use (including my entry, that took 2nd place).

I thought it would be good to release a more optimized version of my library that was designed for real use. This version is significantly slower in Mike’s benchmarks (about 2-3X slower), but that’s because it is tuned for real use cases, concerns itself more with memory use, and includes features like list management, non-zero origins, and variable radii.

It provides a good lesson – optimization is great, but it’s necessity in context always has to be weighed against API, feature, and readability concerns.

Here’s quick demo of it in action, showing 5000 items being updated and compared to the 4 bases every frame:

Continue reading →

Flash Player 10.1 Prerelease on Labs

Adobe just released a beta / prerelease of Flash Player 10.1 on labs. Major improvements include global error handling, out of memory handling, better browser integration, support for browser privacy modes, globalization support, media streaming enhancements, additional content protection options, and a focus on mobile including multitouch.

You can download the FP 10.1 beta player here.

Get all the juicy details in the release notes.

AS3 Kaleidoscope Class

Yesterday, I decided that the outputs from my Wander class would look better with a bit more symmetry, so I spent a couple hours building an AS3 Kaleidoscope class. I thought I’d share the results under the usual MIT license.

It’s fairly fast and robust, supporting one or more slices (not sure why I supported 1 slice, but I did), reflection, display objects or bitmapdata as a source, rotation / position offsets, and a fast mode when using a bitmapdata source without offsets for better performance. I haven’t benchmarked it against PixelBender implementations yet, but plan to do so some time this week.

I’ll post some of the more complex things I’ve been doing with it tomorrow. But here’s the simple demo that’s included with the download:

Continue reading →

Calculating Logarithms With an Arbitrary Base in AS3

If you’ve ever wanted to calculate the logarithm of a number using a base other than Math.E in AS3, you may have noticed the lack of a Math function to do this (ex. Math.logx()). Most likely, if you were doing this, you already knew how to calculate a logarithm with an arbitrary base using the tools you had. But, if you were like me, and knew just enough to know what you wanted, but not enough to know how to get it, this simple function might save you the time it takes to figure it out:

function logx(val:Number, base:Number=10):Number {
return Math.log(val)/Math.log(base)
}

So, “2 log 8” would be logx(8,2).

To be honest, I’m mostly posting this for my own reference when I forget it again in a few months. 🙂

Feel free to correct me if there’s a better way to do this.

Great Pumpkin Showdown ’09 Results

After a week of voting, we’re ready to crown the winners of the 2009 gskinner.com Great Pumpkin Showdown. It was a much closer contest than last year, with the spread between the winners and losers being only about 2:1, but ultimately one pumpkin reigned supreme.

Despite a concerted campaign by certain unnamed third parties to prevent me winning (you know who you are, BWC), my wife Bobi and I took the lead with our pumpkin “Misutaa Supaakoru!” (aka Mr. Sparkle). Go team Skinner!

Thanks to everyone who voted! Here’s a shot of all the pumpkins from this year: