├── .npmrc ├── .browserslistrc ├── .gitignore ├── .github └── FUNDING.yml ├── readme ├── pwa.png ├── header.png ├── header-es6.png ├── screenshot.png └── enable3d-logo.png ├── src ├── favicon.ico ├── assets │ └── img │ │ └── phaser-logo.png ├── scripts │ ├── objects │ │ ├── fpsText.js │ │ └── phaserLogo.js │ ├── game.js │ └── scenes │ │ ├── preloadScene.js │ │ └── mainScene.js └── index.html ├── .prettierrc ├── pwa ├── icons │ ├── icons-192.png │ └── icons-512.png ├── sw.js └── manifest.json ├── tsconfig.json ├── .babelrc ├── webpack ├── webpack.dev.js ├── credits.js ├── webpack.prod.js └── webpack.common.js ├── LICENSE ├── package.json └── README.md /.npmrc: -------------------------------------------------------------------------------- 1 | engine-strict=true -------------------------------------------------------------------------------- /.browserslistrc: -------------------------------------------------------------------------------- 1 | > 0.25% 2 | not dead -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /dist 3 | /.cache 4 | /.vscode -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: yandeu 2 | open_collective: yandeu 3 | patreon: yandeu 4 | -------------------------------------------------------------------------------- /readme/pwa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yandeu/phaser-project-template-es6/HEAD/readme/pwa.png -------------------------------------------------------------------------------- /src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yandeu/phaser-project-template-es6/HEAD/src/favicon.ico -------------------------------------------------------------------------------- /readme/header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yandeu/phaser-project-template-es6/HEAD/readme/header.png -------------------------------------------------------------------------------- /readme/header-es6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yandeu/phaser-project-template-es6/HEAD/readme/header-es6.png -------------------------------------------------------------------------------- /readme/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yandeu/phaser-project-template-es6/HEAD/readme/screenshot.png -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "tabWidth": 2, 3 | "semi": false, 4 | "singleQuote": true, 5 | "printWidth": 120 6 | } 7 | -------------------------------------------------------------------------------- /pwa/icons/icons-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yandeu/phaser-project-template-es6/HEAD/pwa/icons/icons-192.png -------------------------------------------------------------------------------- /pwa/icons/icons-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yandeu/phaser-project-template-es6/HEAD/pwa/icons/icons-512.png -------------------------------------------------------------------------------- /readme/enable3d-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yandeu/phaser-project-template-es6/HEAD/readme/enable3d-logo.png -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "allowJs": true 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/assets/img/phaser-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yandeu/phaser-project-template-es6/HEAD/src/assets/img/phaser-logo.png -------------------------------------------------------------------------------- /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["@babel/preset-env"], 3 | "plugins": ["@babel/plugin-proposal-class-properties", "@babel/plugin-syntax-dynamic-import"] 4 | } 5 | -------------------------------------------------------------------------------- /webpack/webpack.dev.js: -------------------------------------------------------------------------------- 1 | const merge = require('webpack-merge') 2 | const common = require('./webpack.common') 3 | 4 | const dev = { 5 | mode: 'development', 6 | devtool: 'inline-source-map', 7 | devServer: { 8 | open: true 9 | } 10 | } 11 | 12 | module.exports = merge(common, dev) 13 | -------------------------------------------------------------------------------- /src/scripts/objects/fpsText.js: -------------------------------------------------------------------------------- 1 | export default class FpsText extends Phaser.GameObjects.Text { 2 | constructor(scene) { 3 | super(scene, 10, 10, '', { color: 'black', fontSize: '28px' }) 4 | scene.add.existing(this) 5 | this.setOrigin(0) 6 | } 7 | 8 | update() { 9 | this.setText(`fps: ${Math.floor(this.scene.game.loop.actualFps)}`) 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /pwa/sw.js: -------------------------------------------------------------------------------- 1 | /** 2 | * You should only modify this, if you know what you are doing. 3 | * This phaser template is using workbox (https://developers.google.com/web/tools/workbox/) 4 | * to precache all assets. 5 | * It uses the InjectManifest function from 'workbox-webpack-plugin' inside 6 | * webpack/webpack.common.js 7 | */ 8 | import { precacheAndRoute } from 'workbox-precaching' 9 | 10 | precacheAndRoute(self.__WB_MANIFEST) 11 | -------------------------------------------------------------------------------- /src/scripts/objects/phaserLogo.js: -------------------------------------------------------------------------------- 1 | export default class PhaserLogo extends Phaser.Physics.Arcade.Sprite { 2 | constructor(scene, x, y) { 3 | super(scene, x, y, 'phaser-logo') 4 | scene.add.existing(this) 5 | scene.physics.add.existing(this) 6 | 7 | this.setCollideWorldBounds(true) 8 | .setBounce(0.6) 9 | .setInteractive() 10 | .on('pointerdown', () => { 11 | this.setVelocityY(-400) 12 | }) 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /pwa/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "Phaser Game", 3 | "name": "My Cool Phaser 3 Game", 4 | "icons": [ 5 | { 6 | "src": "./icons/icons-192.png", 7 | "type": "image/png", 8 | "sizes": "192x192" 9 | }, 10 | { 11 | "src": "./icons/icons-512.png", 12 | "type": "image/png", 13 | "sizes": "512x512" 14 | } 15 | ], 16 | "start_url": "./index.html", 17 | "background_color": "#e6e6e6", 18 | "display": "fullscreen", 19 | "orientation": "landscape", 20 | "scope": "./", 21 | "theme_color": "#000000" 22 | } 23 | -------------------------------------------------------------------------------- /src/scripts/game.js: -------------------------------------------------------------------------------- 1 | import 'phaser' 2 | import '@babel/polyfill' 3 | 4 | import MainScene from './scenes/mainScene' 5 | import PreloadScene from './scenes/preloadScene' 6 | 7 | const DEFAULT_WIDTH = 1280 8 | const DEFAULT_HEIGHT = 720 9 | 10 | const config = { 11 | type: Phaser.AUTO, 12 | backgroundColor: '#ffffff', 13 | scale: { 14 | parent: 'phaser-game', 15 | mode: Phaser.Scale.FIT, 16 | autoCenter: Phaser.Scale.CENTER_BOTH, 17 | width: DEFAULT_WIDTH, 18 | height: DEFAULT_HEIGHT 19 | }, 20 | scene: [PreloadScene, MainScene], 21 | physics: { 22 | default: 'arcade', 23 | arcade: { 24 | debug: false, 25 | gravity: { y: 400 } 26 | } 27 | } 28 | } 29 | 30 | window.addEventListener('load', () => { 31 | const game = new Phaser.Game(config) 32 | }) 33 | -------------------------------------------------------------------------------- /webpack/credits.js: -------------------------------------------------------------------------------- 1 | /** 2 | * PLEASE DO NOT REMOVE THIS NOTICE! 3 | * 4 | * @template This Phaser game was built using phaser-project-template-es6 (https://github.com/yandeu/phaser-project-template-es6) 5 | * @author Yannick Deubel (https://github.com/yandeu) 6 | * @copyright 2019 Yannick Deubel 7 | * @license {@link https://github.com/yandeu/phaser-project-template-es6/blob/master/LICENSE|MIT License} 8 | */ 9 | 10 | // Of course you can remove it if you really want to, but it would be nice if you would leave it there :) 11 | 12 | console.log( 13 | '%c %c %c %c %c Built using phaser-project-template-es6 %c https://github.com/yandeu/phaser-project-template-es6', 14 | 'background: #ff0000', 15 | 'background: #ffff00', 16 | 'background: #00ff00', 17 | 'background: #00ffff', 18 | 'color: #fff; background: #000000;', 19 | 'background: none' 20 | ) 21 | -------------------------------------------------------------------------------- /src/scripts/scenes/preloadScene.js: -------------------------------------------------------------------------------- 1 | export default class PreloadScene extends Phaser.Scene { 2 | constructor() { 3 | super({ key: 'PreloadScene' }) 4 | } 5 | 6 | preload() { 7 | this.load.image('phaser-logo', 'assets/img/phaser-logo.png') 8 | } 9 | 10 | create() { 11 | this.scene.start('MainScene') 12 | 13 | /** 14 | * This is how you would dynamically import the mainScene class (with code splitting), 15 | * add the mainScene to the Scene Manager 16 | * and start the scene. 17 | * The name of the chunk would be 'mainScene.chunk.js 18 | * Find more about code splitting here: https://webpack.js.org/guides/code-splitting/ 19 | */ 20 | // let someCondition = true 21 | // if (someCondition) 22 | // import(/* webpackChunkName: "mainScene" */ './mainScene').then(mainScene => { 23 | // this.scene.add('MainScene', mainScene.default, true) 24 | // }) 25 | // else console.log('The mainScene class will not even be loaded by the browser') 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /webpack/webpack.prod.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | const merge = require('webpack-merge') 3 | const common = require('./webpack.common') 4 | const JavaScriptObfuscator = require('webpack-obfuscator') 5 | const { CleanWebpackPlugin } = require('clean-webpack-plugin') 6 | 7 | const prod = { 8 | mode: 'production', 9 | output: { 10 | filename: '[name].[contenthash].bundle.js', 11 | chunkFilename: '[name].[contenthash].chunk.js' 12 | }, 13 | optimization: { 14 | splitChunks: { 15 | cacheGroups: { 16 | commons: { 17 | filename: '[name].[contenthash].bundle.js' 18 | } 19 | } 20 | } 21 | }, 22 | plugins: [ 23 | new CleanWebpackPlugin({ cleanOnceBeforeBuildPatterns: [path.resolve(__dirname, '../dist/*.js')] }), 24 | new JavaScriptObfuscator( 25 | { 26 | rotateStringArray: true, 27 | stringArray: true, 28 | // stringArrayEncoding: 'base64', // disabled by default 29 | stringArrayThreshold: 0.75 30 | }, 31 | ['vendors.*.js'] 32 | ) 33 | ] 34 | } 35 | 36 | module.exports = merge(common, prod) 37 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Yannick Deubel (https://github.com/yandeu); Project Url: https://github.com/yandeu/phaser-project-template-es6 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /webpack/webpack.common.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | const CopyWebpackPlugin = require('copy-webpack-plugin') 3 | const HtmlWebpackPlugin = require('html-webpack-plugin') 4 | const { InjectManifest } = require('workbox-webpack-plugin') 5 | 6 | module.exports = { 7 | entry: ['./src/scripts/game.js', './webpack/credits.js'], 8 | output: { 9 | path: path.resolve(__dirname, '../dist'), 10 | filename: '[name].bundle.js', 11 | chunkFilename: '[name].chunk.js' 12 | }, 13 | resolve: { 14 | extensions: ['.js'] 15 | }, 16 | module: { 17 | rules: [{ test: /\.js$/, exclude: /node_modules/, loader: 'babel-loader' }] 18 | }, 19 | optimization: { 20 | splitChunks: { 21 | cacheGroups: { 22 | commons: { 23 | test: /[\\/]node_modules[\\/]/, 24 | name: 'vendors', 25 | chunks: 'all', 26 | filename: '[name].bundle.js' 27 | } 28 | } 29 | } 30 | }, 31 | plugins: [ 32 | new HtmlWebpackPlugin({ gameName: 'My Phaser Game', template: 'src/index.html' }), 33 | new CopyWebpackPlugin([ 34 | { from: 'src/assets', to: 'assets' }, 35 | { from: 'pwa', to: '' }, 36 | { from: 'src/favicon.ico', to: '' } 37 | ]), 38 | new InjectManifest({ 39 | swSrc: path.resolve(__dirname, '../pwa/sw.js') 40 | }) 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /src/scripts/scenes/mainScene.js: -------------------------------------------------------------------------------- 1 | import PhaserLogo from '../objects/phaserLogo' 2 | import FpsText from '../objects/fpsText' 3 | 4 | export default class MainScene extends Phaser.Scene { 5 | fpsText 6 | 7 | constructor() { 8 | super({ key: 'MainScene' }) 9 | } 10 | 11 | create() { 12 | /** 13 | * Delete all the code below to start a fresh scene 14 | */ 15 | new PhaserLogo(this, this.cameras.main.width / 2, 0) 16 | this.fpsText = new FpsText(this) 17 | 18 | // async/await example 19 | const pause = ms => { 20 | return new Promise(resolve => { 21 | window.setTimeout(() => { 22 | resolve() 23 | }, ms) 24 | }) 25 | } 26 | const asyncFunction = async () => { 27 | console.log('Before Pause') 28 | await pause(4000) // 4 seconds pause 29 | console.log('After Pause') 30 | } 31 | asyncFunction() 32 | 33 | // Spread operator test 34 | const numbers = [0, 1, 2, 3] 35 | const moreNumbers = [...numbers, 4, 5] 36 | console.log(`All numbers: ` + moreNumbers) 37 | 38 | // display the Phaser.VERSION 39 | this.add 40 | .text(this.cameras.main.width - 15, 15, `Phaser v${Phaser.VERSION}`, { 41 | color: '#000000', 42 | fontSize: 24 43 | }) 44 | .setOrigin(1, 0) 45 | } 46 | 47 | update() { 48 | this.fpsText.update() 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "phaser-project-template-es6", 3 | "version": "3.24.1", 4 | "description": "Phaser 3 starter template with ES6 and webpack.", 5 | "homepage": "https://github.com/yandeu/phaser-project-template-es6#readme", 6 | "main": "index.js", 7 | "scripts": { 8 | "start": "webpack-dev-server --config webpack/webpack.dev.js", 9 | "build": "webpack --config webpack/webpack.prod.js", 10 | "bundle": "npm run build", 11 | "serve": "serve dist" 12 | }, 13 | "keywords": [ 14 | "Phaser", 15 | "Phaser 3", 16 | "Phaser3", 17 | "html5 game", 18 | "TypeScript", 19 | "webpack", 20 | "starter" 21 | ], 22 | "author": { 23 | "name": "Yannick Deubel", 24 | "url": "https://github.com/yandeu" 25 | }, 26 | "repository": { 27 | "type": "git", 28 | "url": "https://github.com/yandeu/phaser-project-template-es6.git" 29 | }, 30 | "template": { 31 | "name": "phaser-project-template-es6", 32 | "url": "https://github.com/yandeu/phaser-project-template-es6", 33 | "author": "Yannick Deubel (https://github.com/yandeu)" 34 | }, 35 | "engines": { 36 | "node": ">=8.0.0" 37 | }, 38 | "license": "MIT", 39 | "devDependencies": { 40 | "@babel/core": "^7.10.5", 41 | "@babel/plugin-proposal-class-properties": "^7.10.4", 42 | "@babel/plugin-syntax-dynamic-import": "^7.8.3", 43 | "@babel/preset-env": "^7.10.4", 44 | "babel-loader": "^8.1.0", 45 | "clean-webpack-plugin": "^3.0.0", 46 | "copy-webpack-plugin": "^5.1.1", 47 | "html-webpack-plugin": "^3.2.0", 48 | "serve": "^11.3.2", 49 | "typescript": "^3.9.6", 50 | "webpack": "^4.43.0", 51 | "webpack-cli": "^3.3.12", 52 | "webpack-dev-server": "^3.11.0", 53 | "webpack-merge": "^4.2.1", 54 | "webpack-obfuscator": "^0.27.4", 55 | "workbox-webpack-plugin": "^5.1.3" 56 | }, 57 | "dependencies": { 58 | "@babel/polyfill": "^7.10.4", 59 | "phaser": "^3.24.1" 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 |
4 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
25 | Key Features • 26 | Preview • 27 | How To Use • 28 | enable3d • 29 | PWA • 30 | Native App • 31 | Custom Configurations • 32 | TypeScript • 33 | Useful Links • 34 | Multiplayer Game • 35 | Examples • 36 | Credits • 37 | License 38 |
39 | 40 |41 | Want to use TypeScript instead? Switch to the phaser-project-template 42 |43 | 44 |
78 |
79 |
80 | ## How To Use
81 |
82 | To clone and run this template, you'll need [Git](https://git-scm.com) and [Node.js](https://nodejs.org/en/download/) (which comes with [npm](http://npmjs.com)) installed on your computer. From your command line:
83 |
84 | ```bash
85 | # Clone this repository
86 | $ git clone --depth 1 https://github.com/yandeu/phaser-project-template-es6.git phaser3-game
87 |
88 | # Go into the repository
89 | $ cd phaser3-game
90 |
91 | # Install dependencies
92 | $ npm install
93 |
94 | # Start the local development server (on port 8080)
95 | $ npm start
96 |
97 | # Ready for production?
98 | # Build the production ready code to the /dist folder
99 | $ npm run build
100 |
101 | # Play your production ready game in the browser
102 | $ npm run serve
103 | ```
104 |
105 | Change the **gameName** in /webpack/webpack.common.js.
106 |
107 | All your game code lies inside the **/src/scripts** folder. All assets need to be inside the **/src/assets** folder in order to get copied to /dist while creating the production build. Do not change the name of the index.html and game.ts files.
108 |
109 | ## enable3d
110 |
111 |
112 |
113 | Want to add 3D objects and physics to your Phaser game? Checkout [enable3d](https://github.com/yandeu/enable3d#readme)!
114 |
115 | ## Progressive Web App (PWA)
116 |
117 | 
118 |
119 | This template is **100% PWA ready**.
120 |
121 | The ServiceWorker is **disabled by default**. Uncomment the line below inside /src/index.html to enable it.
122 |
123 | ```html
124 |
131 | ```
132 |
133 | You can easily personalize its settings by following these steps:
134 |
135 | - Replace both icons in /pwa/icons with your own.
136 | - One is **512x512** the other **192x192**
137 | - Add your own **favicon.ico** to /src
138 | - Adjust these parameters in the **manifest.json** file in /pwa
139 | - **short_name**: Max. 12 characters
140 | - **name**: The full game name
141 | - **orientation**: "landscape" or "portrait"
142 | - **background_color**: color of the splash screen
143 | - **theme_color**: color of the navbar - has to match the theme-color in the index.html file
144 | - You can leave the **sw.js** (serviceWorker) in /pwa how it is.
145 | - Change the **gameName** in /webpack/webpack.common.js
146 |
147 | Read more about PWA on [developers.google.com](https://developers.google.com/web/progressive-web-apps/)
148 |
149 | ## Native App
150 |
151 | The simplest way to build a Native App is using [Capacitor](https://capacitor.ionicframework.com/) and following its [Documentation](https://capacitor.ionicframework.com/docs/).
152 |
153 | The only thing you need to change after installing Capacitor is the **webDir** inside the **capacitor.config.json** file. Set it to **dist** like so:
154 |
155 | ```json
156 | {
157 | "appId": "com.example.app",
158 | "appName": "YOUR_APP_NAME",
159 | "bundledWebRuntime": false,
160 | "webDir": "dist"
161 | }
162 | ```
163 |
164 | ## Custom Configurations
165 |
166 | ### Babel Compiler
167 |
168 | Change the Babel compiler's settings in the .babelrc file.
169 |
170 | You'll find more information about the babel [here](https://babeljs.io/).
171 |
172 | ### Webpack
173 |
174 | All webpack configs are in the **webpack** folder.
175 |
176 | #### Obfuscation
177 |
178 | We are using the [webpack-obfuscator](https://github.com/javascript-obfuscator/webpack-obfuscator). Change its settings in webpack/webpack.prod.js if needed. All available options are listed [here](https://github.com/javascript-obfuscator/javascript-obfuscator#javascript-obfuscator-options).
179 |
180 | ## TypeScript
181 |
182 | Want to use TypeScript instead of ES6? Switch to the [phaser-project-template](https://github.com/yandeu/phaser-project-template#readme)
183 |
184 | ## Multiplayer Game
185 |
186 | Making a multiplayer game? Check out [geckos.io](https://github.com/geckosio/geckos.io#readme)
187 |
188 | ## Useful Links
189 |
190 | - [Phaser Website](https://phaser.io/)
191 | - [Phaser 3 Forum](https://phaser.discourse.group/)
192 | - [Phaser 3 API Docs](https://photonstorm.github.io/phaser3-docs/)
193 | - [Official Phaser 3 Examples](http://labs.phaser.io/)
194 | - [Notes of Phaser 3](https://rexrainbow.github.io/phaser3-rex-notes/docs/site/index.html)
195 |
196 | ## Examples
197 |
198 | ### Game Examples Built with the TypeScript Starter Template
199 |
200 | #### Platformer Example [[Play this game](https://s3.eu-central-1.amazonaws.com/phaser3-typescript/platformer-example/index.html) - [Visit its Repository](https://github.com/yandeu/phaser3-typescript-platformer-example#readme)]
201 |
202 | [](https://github.com/yandeu/phaser3-typescript-platformer-example#readme)
203 |
204 | #### Phaser 3 + Matter.js: Car Example [[Play this game](https://s3.eu-central-1.amazonaws.com/phaser3-typescript/car-on-curved-tarrain/index.html) - [Visit its Repository](https://github.com/yandeu/phaser3-matter-car-on-curved-terrain#readme)]
205 |
206 |
207 |
208 |
209 |
210 | ## Credits
211 |
212 | A huge thank you to Rich [@photonstorm](https://github.com/photonstorm) for creating Phaser
213 |
214 | ## License
215 |
216 | The MIT License (MIT) 2019 - [Yannick Deubel](https://github.com/yandeu). Please have a look at the [LICENSE](LICENSE) for more details.
217 |
--------------------------------------------------------------------------------