Tag Archives: ActionScript 3

Simple Box2D – Custom Polygon creation.

I’ve been working on some classes to simplify Box2D for Actionscript developers (See previous post for a quick intro).  The latest update to these classes introduces couple of minor ideas, and one gosh-darned awesome idea, if I do say so myself.  Let’s start with the awesome things, and move on from there…

Awesome thing: Creating Custom Polygons

Or rather the methods for creating them.  Shapes in Box2D come in three basic flavours – circle, rectangle and custom polygon.  Moreover, everything must be convex (no inny bits), have no more than 8 sides, and can’t have holes.  On the plus side you can still make larger, more complex objects out of smaller ones – but it all involves a lot of thinking.

So, here’s the solution – or rather, the options.

Polygon creation option #1 – Creating a polygon from an array of points.

Using some clever triangulation code from Splashdust.net, there’s a simple method for creating any custom shape from an array of Point objects.  With this method you can create a shape with any number of sides, and not worry about whether the shape is concave or convex.  It’ll still break if the edges of your shape interest each other, and doesn’t support holes in the objects you’re creating, but it’s a start.

var array:Array = [ new Point( 0, 0 ), new Point( 10, 0 ), new Point( 10, 10 ), new Point( 20, 10 ), new Point( 20, 0 ), new Point( 30, 0 ), new Point( 30, 30 ), new Point( 0, 30 ) ];

world.createComplexPolygon( 50, 50, array );

Polygon creation option #2 – Creating a polygon from a shape in a library.

This is where things get cool.  Creating a shape from a series of points is all well and good, but it’s a laborious process to set up and modify.  You can create a shape in the Flash IDE, add your symbol to your library and import it to Box2D.  Currently this method only supports single shapes on a single layer, and only straight edges – but multiple shapes, layers and curved edges are definitely on the list for the future.

world.createPolyFromLibraryShape( 300, 100, "sampleShape", "vectorassets.swf" );

Read More…

Simplifying Box2DAS3…

One of the downsides to the Box2DAS3 project – and probably one of the major hurdles to most Flash developers – is the fact that it’s inherited a lot of the syntax from the C++ project that it’s derived from.  Maybe it’s just because we’re used to it, but Actionscript is pretty easy to understand, and its methods of working pretty tolerant of inefficient coding.

C++ – or whatever Box2D is written in – is not, and it’s a little painful to setup and easy to break.  For my sanity as much as anyone else’s I’m working on a set of classes in AS3 that wrap around the Box2DAS3 classes, and provide you with a more familiar syntax for working with Box2D – objects, methods and utilities that makes it quicker to throw things together and don’t require you to rethink the way you work.

Well, that’s the eventual aim anyway.

Here’s the result of the first round of development – creating a Box2D world and adding objects, in about 6 lines of code.

var options:Box2DWorldOptions = new Box2DWorldOptions( 500, 280, 30, 9.8 );
options.setWorldEdges( true, true, true, true );
var world:Box2DWorld = Box2DUtils.createBoxedWorld( options );
world.debugDraw = true;
world.animateOnEnterFrame = true;
addChild( world );
for ( var i:int = 0; i < 30; i++ )
{
world.createCircle( 500 * Math.random(), 280 * Math.random(), 50 * Math.random());
}

And here’s the result:

Read More…

The results of my annual “code something different this Christmas” idea.

It’s becoming something of a tradition now I guess, but once I’ve allocated that extra Christmas holiday time appropriately, I find I have that little bit of extra time to devote to trying something new.  This year, I thought I’d try rewriting (again) one of my old university experiments.

Here’s the result:

It’s pretty.  I won’t even try to explain the idea behind it, but it’s basically an attempt at simple life simulation, with some AI governing the actions.  This time around I’ve built it with the aid of Box2D, so all the movement, impacts and interaction is achieved by punching some figures into the Box2D world, which makes the thing a helluva lot easier.

The big plus of “trying something new”? I now have a basic understanding of trigonometry!  I didn’t even have to Google anything!

Link: Name your loops

Name your loops

You can name your loops!  Okay, so it’s not very exciting, but naming your loops will make things so much easier to organise and understand – I expect.  Check out the link to read all about it;

http://blogs.adobe.com/cantrell/archives/2009/12/labels_in_actionscript_3.html

Cool ActionScript projects to try out, if you haven’t already…

Hopefully I’ll get a chance to cover each of these in more detail shortly, but there’s a whole bunch of cool new Actionscript 3 projects that are floating around at the moment – here are some of my favourites that I’m trying to find enough time to explore in detail.  Each stands out from the crowd for being pretty awesome, and I’m hoping to find some killer way to combine them into my projects.

For Animations & Tweening:

GreenSock Tweening Platform [link]
The name actually encompasses five different varieties of animation libraries, and is awesome at scripting individual and timeline animations.  Not just that, but it comes packed with a load of animation options that you didn’t know you wanted, until you see them.  Like realistic motion blur.  That one’s cool.  Especially once you’ve tried making it yourself in the past…

Clipboard data 04-11-09, 23-03-42

Game development

Collision Detection Kit [link]
Much like the GreenSock stuff, just how good this is really has to be seen to be believed.  The basic Actionscript hit-test tools were never really that great.  Sure they worked, but if you wanted anything more than a Boolean response, it was no good at all.  The Collision Detection Kit gives you enough information to do proper physics – working out things like what, where and how hard things hit.  It works with any display object – vectors, bitmaps, even video.

Clipboard data 04-11-09, 23-05-18

Box2D [link]
Box2D.  Runs blindingly fast, precisely calculates physics and interactions.  It’s a true physics engine, rather than others (like Collision Detection Kit) which are just imitating physics.  A little hard to get into because it’s all written differently to every other Actionscript example I’ve ever seen (“You must unlearn what you have learnt”) but once you get over that hurdle, it’s just so… powerful.

Clipboard data 04-11-09, 23-07-22

Documentation for Box2D isn’t very new user friendly, but Emanuele Feronato has a fantastic series of blog posts on Box2D which will prove invaluable.