FlxGroup

import flixel.group.FlxGroup;
HAXE

FlxGroups are an invaluable method of grouping your game objects in Flixel. In fact, there is no way around them, as FlxState itself extends FlxGroup. The use cases for groups are vast: pooling to reuse objects, collision detection and setting up easy ways to access particular collections of objects. A great feature of FlxGroups are their ability to be nested when using collision detection. Doing collisions is also way more efficient than doing it for individual objects.

The API for FlxGroups is similar to other places in Flixel. Here is a basic example using a group to pool bullet objects, represented by a Bullet class, holding a maximum of 100 bullets:

var poolSize = 100;
var bullets = new FlxTypedGroup<Bullet>(poolSize);

for (i in 0...poolSize)
{
	var bullet = new Bullet();
	bullet.kill();
	bullets.add(bullet);
}
HAXE

Note how we did not use a regular FlxGroup, but a FlxTypedGroup<Bullet>. This means that this particular group can only store objects that are instances of the Bullet class or instances of Bullet subclasses. FlxGroup itself is nothing but a shortcut for FlxTypedGroup<FlxBasic>.

Now, say we want to retrieve bullet instance to use in a shoot method:

var bullet = bullets.recycle(Bullet);
HAXE

If we had used a regular group here, we would have had to cast the return value of recycle() to a Bullet. By using a FlxTypedGroup<Bullet>, we have the benefit of type-safety.

add(Object:T):T;

You can add any type of Object that extends the base FlxGroup type, if you use FlxGroup this is FlxBasic.

remove(Object:T):T

Removes an object from a group, it will return the object you removed.

getFirstAvailable(ObjectClass:Class<T> = null):T

This will let you get the first FlxBasic object that has exists == false, this is typically used in object pooling when object may have used the kill() method. Note if you destroy() objects they will be made null in the FlxGroup and you wont be able to reuse them.

kill();

This will recursively kill() all objects so that they will be ready for use with getFirstAvailable.

sort(Function:Int->T->T->Int, Order:Int = FlxSort.ASCENDING);

Call this function to sort the group according to a particular value and order. You will need to specify a sorting function to do so. If you want to sort by something other than y, you will have to write a custom sorting function.

Otherwise, you can just use the pre-made FlxSort.byY() like so for Zelda-style-sorting:

group.sort(FlxSort.byY);
HAXE