The Module Structure
At the time of writing Phaser 3 uses the file src/phaser.js
as its main entry point.
If you look at this file you'll see it's basically the root-level structure of the Phaser API. New features, as they are added to V3, will be exposed in here. The structure of the object in this file defines the namespace of the API. For example:
var Phaser = { Game: require('./boot/Game'), Event: require('./events/Event'), EventDispatcher: require('./events/EventDispatcher'), Math: require('./math'), Geom: require('./geom'),
In the above, the Geom
object is a reference to the src/geom/index.js
file, which contains:
// Phaser.Geom module.exports = { Circle: require('./circle'), Ellipse: require('./ellipse'), Intersects: require('./intersects'), Line: require('./line'), Point: require('./point'), Rectangle: require('./rectangle') };
This means you can use Phaser.Geom.Circle
in your code. The Circle
line in the geom module index above maps to src/geom/circle/index.js
which contains:
// Phaser.Geom.Circle var Circle = require('./Circle'); Circle.Area = require('./Area'); Circle.Circumference = require('./Circumference'); Circle.CircumferencePoint = require('./CircumferencePoint'); Circle.Clone = require('./Clone'); Circle.Contains = require('./Contains'); Circle.ContainsPoint = require('./ContainsPoint'); Circle.ContainsRect = require('./ContainsRect'); Circle.CopyFrom = require('./CopyFrom'); Circle.Equals = require('./Equals'); Circle.GetBounds = require('./GetBounds'); Circle.Offset = require('./Offset'); Circle.OffsetPoint = require('./OffsetPoint'); Circle.Random = require('./Random'); module.exports = Circle;
In the above, the Circle
file contains the base class / object, and the rest of the files contain additional functions that help support it. Based on the above structure you can do:
var circle = new Phaser.Geom.Circle(0, 0, 32); var area = Phaser.Geom.Circle.Area(circle); var circle2 = Phaser.Geom.Circle.Clone(circle);
... and so on. The Circle
class itself contains core functionality, such as:
var circle = new Phaser.Geom.Circle(0, 0, 32); circle.setPosition(100, 200);
The concept behind it is that the classes contain only the bare minimum that the objects need in order to function. They are kept intentionally tiny, to minimize creation time, promote internal class compilation, and keep memory overhead as low as possible.
All of the additional functionality a class may need is added via functions (such as Area
, Contains
, Random
, etc).
This means that the 'standard' Phaser 3 API can include all of these functions by default, to help keep it easy to use for devs, but that if you wish to create your own much smaller, and more refined, build - then you can literally say "Nope, don't need any of those extra Circle functions", and just not include them.