Skip to content

Container

Introduction

Control the position and angle of children game objects, built-in game object of phaser.

  • Author: Richard Davey

Usage

Container

Add container object

var container = scene.add.container(x, y);
// var container = scene.add.container(x, y, children); // children: an array of game object

Custom class

  • Define class
    class MyContainer extends Phaser.GameObjects.Container {
        constructor(scene, x, y, children) {
            super(scene, x, y, children);
            // ...
            scene.add.existing(this);
        }
        // ...
    
        // preUpdate(time, delta) {}
    }
    
    • scene.add.existing(gameObject) : Adds an existing Game Object to this Scene.
      • If the Game Object renders, it will be added to the Display List.
      • If it has a preUpdate method, it will be added to the Update List.
  • Create instance
    var container = new MyContainer(scene, x, y, children);
    

Destroy

container.destroy();

Also destroy all children game objects.

Set properties

Reference game object, to set position, angle, visible, alpha, etc...

Set size

container.setSize(width, height);

Default size is 0x0.

Set scroll factor

container.setScrollFactor(x, y);

Apply this scrollFactor to all Container children.

container.setScrollFactor(x, y, true);

Hit area

container.setInteractive(new Phaser.Geom.Circle(0, 0, radius), Phaser.Geom.Circle.Contains);
// container.setInteractive(false); // disable

Assign hit area with a circle shape.

Non-exclusive

container.setExclusive(false);

Allows a game object added to container many times.

Children

Add child

container.add(child);  // child: a game object or an array of game objects
container.addAt(child, index);

Exist

var hasChild = container.exists(child);

Get child

var firstChild = container.first;
var nextChild = container.next;
var prevChild = container.previous;
var lastChild = container.last;
var child = container.getByName(name);
var child = container.getRandom(startIndex, length);
var child = container.getFirst(property, value, startIndex, endIndex);
// value: the value to test the property against. Must pass a strict (`===`) comparison check.
var children = container.getAll(property, value, startIndex, endIndex);
// value: the value to test the property against. Must pass a strict (`===`) comparison check.
var amount = container.count(property, value, startIndex, endIndex);
// value: the value to test the property against. Must pass a strict (`===`) comparison check.

Sort children

container.sort(property);
container.sort(property, function(childA, childB){
    return 0; // 0, 1, -1
});

Remove child

container.remove(child);
// container.remove(child, true);  // remove child object and destroy it
container.removeAt(index);
// container.removeAt(index, true);  // remove child object and destroy it
container.removeBetween(startIndex, endIndex);
// container.removeBetween(startIndex, endIndex, true);  // remove children objects and destroy them
container.removeAll();
// container.removeAll(true);  // remove all children objects and destroy them

Removing child from container without destroying will put back into scene's display list.

Order of child

container.moveTo(child, index);
container.bringToTop(child);
container.sendToBack(child);
container.moveUp(child);
container.moveDown(child);
container.moveAbove(child1, child2);  // Move child1 above child2
container.moveBelow(child1, child2);  // Move child1 below child2
container.swap(child1, child2);
container.reverse();
container.shuffle();

Replace child

container.replace(oldChild, newChild);
// container.replace(oldChild, newChild, true);  // destroy oldChild

Set properties

container.setAll(property, value, startIndex, endIndex);

For each child

  • Iterate current children list
    container.iterate(callback);
    // container.iterate(callback, context);
    // container.iterate(callback, context, arg0, arg1, ...);
    
    • callback :
      function(child, arg0, arg1, ...) {
      
      }
      
  • Iterate a copy of current children list
    container.each(callback);
    // container.each(callback, context);
    // container.each(callback, context, arg0, arg1, ...);
    
    • callback :
      function(child, arg0, arg1, ...) {
      
      }
      

Get world position, rotation, scale

var matrix = child.getWorldTransformMatrix();
var x = matrix.tx;
var y = matrix.ty;
var rotation = matrix.rotation;
var scaleX = matrix.scaleX;
var scaleY = matrix.scaleY;

Other properties

See game object

Create mask

var mask = container.createBitmapMask();

See mask

Shader effects

Support postFX effects

Note

No preFX effect support

Compare with group object

  • Container and group objects are all have a children list.
  • Container has position, angle, alpha, visible, ...etc, but group does not have.
  • Container controls properties of children (position, angle, alpha, visible, ...etc), but group won't.
  • A game object could be added to many groups, but it only could be added to one container (exclusive mode).