Phaser3的模块结构
机译并读改, 自:Phaser 3 Contributors Guide: The Module Structure
Phaser3的模块结构
更新于: 2018年1月11日,by Richard Davey@photonstorm
在写这篇文章的时候,Phaser 3使用src/phaser.js
这个文件作为主入口。
如果你看这个文件,你会发现它基本上是Phaser API的根级结构。当V3中加入新的功能时,将在这里暴露出来。这个文件中的对象结构定义了API的命名空间。例如,在这个文件中,我们可以看到:
| var Phaser = {
Game: require('./boot/Game'),
Event: require('./events/Event'),
EventDispatcher: require('./events/EventDispatcher'),
Math: require('./math'),
Geom: require('./geom'),
|
在上图中,Geom对象是对src/geom/index.js
文件的引用,其中包含:
| // Phaser.Geom
module.exports = {
Circle: require('./circle'),
Ellipse: require('./ellipse'),
Intersects: require('./intersects'),
Line: require('./line'),
Point: require('./point'),
Rectangle: require('./rectangle')
};
|
这意味着你可以在你的代码中使用Phaser.Geom.Circle
。上面geom
模块索引中的Circle
行映射到src/geom/circle/index.js
中,其中包含:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | // 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;
|
在上面的文件中,Circle
文件包含了基类/根对象,其余的文件包含了支持它的附加函数。基于上述结构,你可以这样做:
| var circle = new Phaser.Geom.Circle(0, 0, 32);
var area = Phaser.Geom.Circle.Area(circle);
var circle2 = Phaser.Geom.Circle.Clone(circle);
|
如此等等。Circle
类本身包含了一些核心功能,比如:
| var circle = new Phaser.Geom.Circle(0, 0, 32);
circle.setPosition(100, 200);
|
其后的想法是,这些类只包含让对象发挥作用所需的最低限度的东西。它们被有意地保持在最小的范围内,以减少构建时间,加快内部类的编译,并保持尽可能低的内存开销。
一个类可能需要的所有附加功能都是通过添加函数来实现的(如Area
, Contains
, Random
等)。
这意味着"标准的"Phaser 3 API可以默认包含所有这些函数,以便于使用,但如果你想创建自己的更小、更精致的构建版本,那么你可以说"不,不需要任何这些额外的Circle
函数",那就不把它们加进来好了。