Phaser3 游戏开发入门——自定义构建Phaser库

摘要:
Phaser是一个简单而强大的html5游戏框架。开始自定义。例如,如果项目是一个2D国际象棋游戏,我们不需要任何物理引擎。我们可以安全地将其从Phaser对象//Physics:require中移除。步骤5:清理加载程序和游戏对象。在大多数情况下,我们不需要所有的文件类型。

Phaser是一个简单易用且功能强大的html5游戏框架。

其实一点也不简单。虽然是js开发,但事实上您可以将项目发布到任何平台。

由于功能实在是太多,如果要降低Phaser的文件大小(880kb),我们可以自定义Phaser库的构建,指南https://medium.com/@louigi.verona/reducing-phasers-filesize-custom-phaser-builds-4a0314819a38

以下为译文(摘要)

第一步:git clonehttps://github.com/photonstorm/phaser3-custom-build

第二步:初始化设置,进目录执行npm install,如果遇到问题执行npm audit fix,最后更新phaser库,执行 npm update phaser

第三步:构建

构建命令格式为npm run [ALIAS]。[ALIAS]部分决定了你要构建哪个版本,dist是构建的默认目标目录。

npm run buildcore

npm run buildfull

...

第四步 构建自定义版

复制phaser-full.js的内容到phaser-custom.js。它的完整内容是

require(‘polyfills’);
var CONST =require(‘const’);
var Extend = require(‘utils/object/Extend’);
/**
 * @namespace Phaser
 */
var Phaser ={
 Actions: require(‘actions’),
 Animations: require(‘animations’),
 Cache: require(‘cache’),
 Cameras: require(‘cameras’),
 Core: require(‘core’),
 Class: require(‘utils/Class’),
Create: require(‘create’),
 Curves: require(‘curves’),
 Data: require(‘data’),
 Display: require(‘display’),
 DOM: require(‘dom’),
 Events: require(‘events/EventEmitter’),
 Game: require(‘core/Game’),
GameObjects: require(‘gameobjects’),
 Geom: require(‘geom’),
 Input: require(‘input’),
 Loader: require(‘loader’),
 Math: require(‘math’),
 Physics: require(‘physics’),
 Plugins: require(‘plugins’),
 Renderer: require(‘renderer’),
 Scale: require(‘scale’),
 Scene: require(‘scene/Scene’),
Scenes: require(‘scene’),
 Sound: require(‘sound’),
 Structs: require(‘structs’),
 Textures: require(‘textures’),
 Tilemaps: require(‘tilemaps’),
 Time: require(‘time’),
 Tweens: require(‘tweens’),
 Utils: require(‘utils’)
};
Phaser = Extend(false, Phaser, CONST);
module.exports =Phaser;
global.Phaser = Phaser;

执行npm run build,build这个别名的配置就依赖于 “phaser-custom.js”。

开始自定义,举个例子,如项目是一个2D的棋牌游戏,我们就不需要任何物理引擎,从Phaser对象中安全的移除它。

//Physics: require(‘physics’),

第五步 清理Loader 和 GameObjects

大多数情况下,我们不需要所有的文件类型。

首先是处理GameObjects,在项目目录的/node_modules/phaser/src/gameobjects/下我们可以看到完整的GameObjects,每个目录代表一类game object

假设我们要在假如Image Sprite Text这几种game object,我们可以将GameObjects: require(‘gameobjects’)替换为

GameObjects: {
 DisplayList: require(‘gameobjects/DisplayList’),
 UpdateList: require(‘gameobjects/UpdateList’),
 Image: require(‘gameobjects/image/Image’),
 Sprite: require(‘gameobjects/sprite/Sprite’),
 Text: require(‘gameobjects/text/static/Text’),
Factories: {
   Image: require(‘gameobjects/image/ImageFactory’),
   Sprite: require(‘gameobjects/sprite/SpriteFactory’),
   Text: require(‘gameobjects/text/static/TextFactory’)
},
 Creators: {
   Image: require(‘gameobjects/image/ImageCreator’),
   Sprite: require(‘gameobjects/sprite/SpriteCreator’),
   Text: require(‘gameobjects/text/static/TextCreator’)
}}

然后是Loaders,替换Loader: require(‘loader’),

Loader: {
 FileTypes: {
  ImageFile: require(‘loader/filetypes/ImageFile’),
   AudioFile: require(‘loader/filetypes/AudioFile’),
   SpriteSheetFile: require(‘loader/filetypes/SpriteSheetFile’),
   ScriptFile: require(‘loader/filetypes/ScriptFile’)
 },
 LoaderPlugin: require(‘loader/LoaderPlugin’)
}

注意最后的结构中的LoaderPlugin,但其他类型还可能需要其他自定义的扩展,完整的文件类型可在/node_modules/phaser/src/loader/filetypes/下查看。

phaser-custom.js例子

require(‘polyfills’);
var CONST =require(‘const’);
var Extend = require(‘utils/object/Extend’);
/**
 * @namespace Phaser
 */
var Phaser ={
Actions: require(‘actions’),
 Animations: require(‘animations’),
 Cache: require(‘cache’),
 Cameras: require(‘cameras’),
 Core: require(‘core’),
 Class: require(‘utils/Class’),
Create: require(‘create’),
 Display: require(‘display’),
 Events: require(‘events/EventEmitter’),
 Game: require(‘core/Game’),
 //GameObjects: require(‘gameobjects’),
GameObjects: {
 DisplayList: require(‘gameobjects/DisplayList’),
 UpdateList: require(‘gameobjects/UpdateList’),
Group: require(‘gameobjects/group/Group’),
 Image: require(‘gameobjects/image/Image’),
 Sprite: require(‘gameobjects/sprite/Sprite’),
 Text: require(‘gameobjects/text/static/Text’),
Factories: {
 Group: require(‘gameobjects/group/GroupFactory’),
 Image: require(‘gameobjects/image/ImageFactory’),
 Sprite: require(‘gameobjects/sprite/SpriteFactory’),
 Text: require(‘gameobjects/text/static/TextFactory’)
},
Creators: {
 Group: require(‘gameobjects/group/GroupCreator’), 
 Image: require(‘gameobjects/image/ImageCreator’),
 Sprite: require(‘gameobjects/sprite/SpriteCreator’),
 Text: require(‘gameobjects/text/static/TextCreator’)
}
 },
 Input: require(‘input’),
 Loader: {
 FileTypes: {
 ImageFile: require(‘loader/filetypes/ImageFile’),
 AudioFile: require(‘loader/filetypes/AudioFile’),
 SpriteSheetFile: require(‘loader/filetypes/SpriteSheetFile’),
 ScriptFile: require(‘loader/filetypes/ScriptFile’)
 },
 LoaderPlugin: require(‘loader/LoaderPlugin’)
},
 Plugins: require(‘plugins’),
 Renderer: require(‘renderer’),
 Scale: require(‘scale’),
 Scene: require(‘scene/Scene’),
Scenes: require(‘scene’),
 Sound: require(‘sound’)
};
Phaser = Extend(false, Phaser, CONST);
module.exports =Phaser;
global.Phaser = Phaser;

结论

自定义可以帮助你把不需要的模块都去掉,作者就将880k减到了450k。

免责声明:文章转载自《Phaser3 游戏开发入门——自定义构建Phaser库》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇内存映射大文件UICollectionView下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

关于 angular 项目 结合 RequireJs 的问题整理

1、在 将 依赖的js 通过 require.config 设置 映射的时候,结合dataTables.bootstrap.js和 jquery.dataTables.js 时 遇到如下报错: Uncaught Error: Script error for "datatables.net", needed by: dataTablesbootstrap;...

Puppeteer的使用

资源链接 Puppeteer官方文档:https://github.com/GoogleChrome/puppeteer puppeteer社区:https://slack.com/ 安装 //安装puppeteer cnpm i puppeteer //安装puppeteer-core cnpm i puppeteer-core 常用方法或属性 1.pu...

让Apache支持URL重写

第一步: 添加.htaccess文件 Rewrite 规则 <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^...

第四节:Webpack本地服务器搭建、剖析devServer的HRM热替换和其它配置、resolve模块解析、区分开发/生产环境方案实战

一. webpack本地服务器搭建 1. 为什么要搭建本地服务器?  我们之前通过【npm run build】,编译相关的代码; 然后需要在浏览器中运行,每次修改修改代码,都需要重新编译运行,很麻烦。我们希望可以做到,当文件发生变化时,可以自动的完成 编译 和 展示 。 2. watch mode模式 (1). 简介   在该模式下,webpack依赖图...

Node.js 文件系统

Node.js 提供一组类似 UNIX(POSIX)标准的文件操作API。 Node.js 文件系统(fs 模块)模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync()。 异步的方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息(error)。 建议大家使用异...

封装一个获取module.exports内容的方法

let fs = require('fs') let req = (moduleName) => { //content代表的是文件内容 let content = fs.readFileSync(moduleName, 'utf8') console.log(content + ' return module.expor...