Saturday, February 26, 2011

Flash Game Dev Tip #3 – Bullet Manager Part 1

Flash Game Dev Tip #3 – Bullet Manager Part 1:

Flash Game Dev Tip #3

Tip #3 – Flixel – Bullet Manager Part 1

If you are coding a shoot-em-up, or even a platformer with guns, then you’ll have a need for the player to be able to fire bullets. Or the enemies to fire at you. This tip is about creating a Bullet Manager class. The class is responsible for the launch, update, pooling and re-use of bullets.

Object Pool

Creating new objects in Flash is expensive. By “new objects” I mean code such as:

var bullet:Bullet = new Bullet();

… which creates a brand new object an assigns it to bullet.

And by “expensive” I mean it takes time for Flash to process the request for the new object, assign memory to it and create it. If you are firing off tens of bullets every few seconds this can take its toll. And if you don’t actively clean-up the objects created you can quickly run out of resources.

To mitigate this problem we create a “pool”. This is a pool of resources (in our case bullets) that the Bullet Manager can dip in to. It will look for a free bullet, and recycle it for use in the game. When the bullet has finished doing what bullets do best, it will free itself up for use again. By using a pool you avoid creating new objects on the fly, and help keep memory in check.

Meet FlxGroup

Thankfully flixel has a class you can use to make this process simple. It’s called FlxGroup. You can add objects to a group, there are plenty of  functions for getting the next available resource, and you can even perform group to group collision. Objects in a group are all rendered on the same layer, so are easy to position within your game. The first task is to create a pool of bullets to draw from.

In this example we’ve got a class called Bullet.as. Bullet extends FlxSprite with a few extra values such as damage and bullet type [...]

No comments:

Post a Comment