**Phaser**是一个HTML5游戏框架，此框架的目的是辅助开发者真正快速地制作强大的、跨浏览器的HTML5游戏。 此框架对浏览器的唯一要求是支持画布（canvas）标签。

概述
--

Phaser是一款由Richard Davey在Photon Storm Ltd.下开发的开源HTML5游戏框架。它专门用于制作2D游戏，允许开发者使用JavaScript进行开发，并可在多种平台上运行。它能够充分发挥WebGL的性能，同时还保持与Canvas的兼容。

### 特性

* 动画：支持帧动画和骨骼动画。
* 物理引擎：内置Arcade Physics、Ninja Physics以及P2 Physics等多款物理引擎，以支持复杂的物理交互。
* 渲染：能够处理Canvas和WebGL渲染。
* 输入：支持键盘、鼠标以及触摸输入。
* 音效：提供音频精灵的支持，以及Web Audio和HTML5 Audio的兼容。

### 使用及应用

Phaser的易用性和强大功能使它成为开发2D游戏的优秀工具，从简单的休闲游戏到复杂的策略游戏，Phaser都在各类项目中得到应用。由于它有着活跃的社区和丰富的文档，开发者可以迅速上手并参与到项目开发中来。

### 插件

Phaser的生态系统提供了一系列的插件、扩展机制、积极的社区，以及与其他工具和引擎集成开发。Phaser插件主要包括四类，分别是：BasePlugin 类、ScenePlugin 类、PluginCache、DefaultPlugins。但概括其特性可将Phaser插件分为两大类，即官方内置插件和开发者自定义插件，其中，内置插件分为全局和场景专用插件。

Phaser的插件机制可以概括为：

● 安装外部插件记录：开发者使用"installScenePlugin"方法来记录外部插件的安装情况。这个过程用于让Phaser熟知哪些插件可以使用。

● 插件实例化：通过"PluginManager.addToScene()"方法将插件添加到场景中从而实例化插件。这个过程用于实现插件和场景中的对象进行交互。

● 检查：在切换场景时，重新检查插件的安装情况。

● 释放：在销毁游戏时，Phaser释放插件所占用的资源，清除插件数据。

Phaser插件为游戏开发者提供了丰富多样的资源和工具，在满足特定需求的同时简化开发流程，从而创造更有吸引力的游戏体验。

HTML5 游戏项目的基本结构
---------------

一个 HTML5 游戏项目通常包括以下文件夹和文件：

* Scripts/ (或 js/) ：在这个文件夹中，你可以找到关键的框架文件，通常被称为"Phaser.js"。它通常包含一个专门用于利用该框架的游戏代码的文件。
* Src/：这个文件夹是为了存储源文件而设置的。这些文件最终会被编译以创建完整的游戏代码。
* Assets/：在这个文件夹内，你可以找到各种子文件夹：
	+ Images：这里存放了图形资产，如背景和精灵。
	+ Maps：这里存放游戏中使用的任何瓦片图所需的数据。
	+ Sounds：这是游戏的音效保存的地方，通常有多种格式。
	+ Music：这里包含游戏的音乐轨道，也有多种格式。
	+ Misc：杂项数据，如对话文件、运行时脚本和其他特殊文件，都存储在这里。
* Index.html：这个文件是游戏的入口点。因此，它设置了游戏并启动了加载过程。JavaScript 在初始设置之后处理交互。此 html 文件还可能包括基本样式来定位网页上的游戏，并围绕它创建一个用户界面（UI）。

发展历程
----

Richard Davey在2013年4月的博客文章中宣布了Phaser的首次发布。
1.0版于9月发布，集成了用于渲染的Pixi.js库。

Phaser 2的最后一个官方版本是2.6.2，但为了在开发Phaser 3的同时对稳定版本进行改进，创建了一个新的仓库：Phaser CE（Community Edition）。

因此，Phaser CE目前是使用Phaser进行开发的推荐稳定平台。

Phaser 3.0.0于2018年2月13日发布，其开发正在GitHub上进行。
该框架的大多数元素和功能都已从零开始重建，采用完全模块化的结构和数据导向的方法。Phaser 3包括一个为现代2D游戏设计的全新定制WebGL渲染器。自那时以来，已经完成了大部分文档和用户示例，并且已经实现了大多数功能。

目前正在开发的是Phaser 4，宣布于2019年8月19日，它试图用TypeScript重写Phaser 3。
这不是API重写，而是将重点放在将目前在Phaser 3中的脚本移植到TypeScript上。

Phaser自从发布以来，已经经过多个版本的迭代与改进，它在开发者社区中积累了大量的用户，并且得到了一致好评。其发展受益于开源社区的贡献和积极的反馈。

架构和功能
-----

Phaser 可在任何支持画布（canvas）元素的网络浏览器中运行。使用 Phaser 制作的游戏使用 JavaScript 或 TypeScript 开发。加载图片、声音和其他游戏文件等资源需要网络服务器，因为浏览器要求网页只能访问来自同一来源的文件。

### 渲染

Phaser 可使用 WebGL 或 Canvas 元素进行渲染，如果浏览器支持 WebGL，则可选择使用 WebGL；如果设备不支持 WebGL，则会退回到 Canvas。

### 物理

Phaser 配备了 3 种物理系统： Arcade Physics、Ninja Physics 和 P2.JS。

Arcade Physics 仅用于高速 AABB 碰撞。忍者物理 "允许使用复杂的瓷砖和斜坡，足以满足关卡场景的需要。"P2.JS 是一个全身物理系统，支持约束、弹簧和多边形等。

从 phaser 3.6 开始，有两个主要的物理引擎。它们分别被称为 Arcade 和 Matter。还有一个与 Arcade 相似的引擎，名为 Impact，但鲜为人知。

在这三个引擎中，Arcade 可能是使用最多的一个，因为它速度快且易于使用。它在所有基本物理引擎功能（如重力、加速度和阻力）的基础上，使用轴对齐（非旋转）的矩形和圆形进行碰撞检测。它的缺点是功能有限。要利用支持的形状制作复杂的撞击框可能非常困难，而且多个物体靠近会导致稳定性问题。

Matter 是更先进的物理引擎，但其复杂性也随着功能的增加而提高。Matter 能够模拟非常逼真的全身物理效果。它支持多种功能，如刚体、复合体、弹性碰撞、稳定堆叠以及质量和密度等物理属性。

Impact 与 Arcade 有许多相似之处，但也带来了一些有用的优势。例如，Impact 可以在瓦片贴图中加入斜坡，而 Arcade 的轴对齐矩形则无法做到这一点。不过，这样做的缺点是您必须使用 Impact 引擎开发人员自己的 "Weltmeister "编辑器来创建平铺贴图。

### 动画和音频

Phaser是一款功能强大的游戏引擎，具备出色的动画和音频功能，提供了多种工具和选项来实现引人入胜的游戏体验：

动画： Phaser支持Spritesheet和纹理图集，这些包括了多个帧或角色动画，开发者能使用帧序列来制作动画。phaser的动画序列功能使开发者能够轻松创建精灵的动画序列，包括循环、速度和帧速率的控制，从简单的角色移动到复杂的特效动画。同时phaser还提供内置的Tweening引擎，用于创建平滑的过渡动画，这对于实现比如渐变、缩放、旋转等动画特别有用，还可以实现其他的复杂的特效动画。

音频： Phaser允许开发者管理和播放网络音频和HTML5音频，并且提供了丰富的音频效果控制选项，包括音量、静音、循环、淡入淡出和声道定位等，这些属性可以通过需求进行调整，同时phaser支持音频文件的预加载，以确保无延迟的音效播放，以便于随时播放，提供更好的游戏体验。

参见
--

* Unity
* Godot

参考文献
----

1. ↑ . . Taylor & Francis Group, 6000 Broken Sound Parkway NW, Suite 300, Boca Raton, FL 33487-2742: CRC Press. 2016-09-22: 43–53.
2. ↑  Lodriguez, Oscar.. . Berkeley, CA: Apress. 2019: C1–C1. ISBN 978-1-4842-4248-3.
3. ↑ . Wikipedia. 2023-10-14 （英语）.
4. ↑  Rich.. Phonon Storm.  [2023-10-19]. （原始内容存档于2023-06-01）.
5. ↑  Rich.. Phonon Storm.  [2023-10-19]. （原始内容存档于2023-06-02）.
6. ↑ . Phaser.  [2023-10-19]. （原始内容存档于2022-09-29）.
7. ↑ . Phaser.  [2023-10-19]. （原始内容存档于2018-05-15）.
8. ↑ . Phaser.  [2023-10-19]. （原始内容存档于2020-02-20）.
9. ↑  Richard, Davey.. 2018-02-20  [2023-10-13]. （原始内容存档于2023-10-13）.
10. ↑ . mozilla.org.  [2021-09-30]. （原始内容存档于2017-03-12）.