跳转至

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的命名空间。例如,在这个文件中,我们可以看到:

1
2
3
4
5
6
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文件的引用,其中包含:

1
2
3
4
5
6
7
8
9
//  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文件包含了基类/根对象,其余的文件包含了支持它的附加函数。基于上述结构,你可以这样做:

1
2
3
var circle = new Phaser.Geom.Circle(0, 0, 32);
var area = Phaser.Geom.Circle.Area(circle);
var circle2 = Phaser.Geom.Circle.Clone(circle);

如此等等。Circle类本身包含了一些核心功能,比如:

1
2
var circle = new Phaser.Geom.Circle(0, 0, 32);
circle.setPosition(100, 200);

其后的想法是,这些类只包含让对象发挥作用所需的最低限度的东西。它们被有意地保持在最小的范围内,以减少构建时间,加快内部类的编译,并保持尽可能低的内存开销。

一个类可能需要的所有附加功能都是通过添加函数来实现的(如Area, Contains, Random等)。

这意味着"标准的"Phaser 3 API可以默认包含所有这些函数,以便于使用,但如果你想创建自己的更小、更精致的构建版本,那么你可以说"不,不需要任何这些额外的Circle函数",那就不把它们加进来好了。

评论