本篇主要演示通过webpack打包phaser项目,webpack安装方法在此处就不一一赘述了

经常用phaser来写html5游戏的朋友可能会发现,当游戏场景比较多时,如果都写在一个js文件中那么将来会很难维护,如果分成多个JS分别来管理不同的场景将会很方便

1. 首先来到项目根目录

在该目录中打开命令行,然后启动webpack

2、在app目录中建立一个文件夹,主要用来放置打包前的文件

从图中可以很看到,分成了专门用来引导,预加载,游戏菜单,游戏主逻辑,等js文件,由于用的是ES6的模块语法,ES6的module是动态引用的,即对外暴露的是该模块的引用, 可以新建一个public.js专门用来存放共享的变量

//public.js  用来存放phaser对象,然后其他js文件都import该文件就可以使用phaser对象了
export default {
game: null, }
// main.js 是模块的入口,这里把需要打包的js文件引入进来,从上面的public文件代码中可以看到export了一个对象,在这里把phaser对象传递给public中的game属性。


import vars from './public.js';
import Boot from './boot.js';
import Preloader from './preloader.js';
import Menu from './menu.js';
import Game from './game.js'; var gameScore = 0;
var h = $(window).height();
var game = vars.game = new Phaser.Game(640, h, Phaser.CANVAS, 'game');//就是这里啦,
game.state.add('Boot',Boot);
game.state.add('Preloader',Preloader); game.state.add('Menu',Menu); game.state.add('Game',Game);
game.state.start('Boot');
//boot.js 用来添加加载条图片和启动加载页面

import vars from './public.js';

export default {
preload:function(){
vars.game.load.image('preloaderBar','assets/loading-bar.png');
},
create:function(){
vars.game.state.start('Preloader');
}
}
//preloader.js
import vars from './public.js'; export default {
preload : function(){
var preloadSprite = vars.game.add.sprite(vars.game.world.width/4,vars.game.world.height / 2 ,'preloaderBar');
var preloadText = vars.game.add.text(vars.game.width/2,vars.game.height/2+60,'0%',{font:'40px Arial',align:"center",color:"#fff"})
console.log(preloadSprite);
vars.game.load.setPreloadSprite(preloadSprite);
// vars.game.load.audio('drivin-home', 'assets/world.wav');
// vars.game.load.audio('ho-ho-ho', 'assets/bonbon.wav');
// vars.game.load.audio('hop', 'assets/bomb.wav');
vars.game.load.image('platform', 'assets/1.png');
vars.game.load.spritesheet('santa-running', 'assets/runman.png', 493/5, 174,5);
vars.game.load.image('snow-bg', 'assets/beijing1.png');
vars.game.load.image('snow-bg-2', 'assets/yuanjing1.jpg');
vars.game.load.image('snowflake', 'assets/xiaoshixiaoguo.png');
vars.game.load.image('logo', 'assets/name.png');
vars.game.load.image('startbtn', 'assets/bangzhujiantou.png'); vars.game.load.onFileComplete.add(function(){
var progress = vars.game.load.progress;
preloadText.text = progress+'%';
});
vars.game.load.onLoadComplete.add(function(){//所有资源加载完成
preloadText.kill();
vars.game.state.start('Menu');
})
},
create:function(){ }
}
//main.js
import vars from './public.js'; export default {
create : function(){
vars.game.add.tileSprite(0,0,vars.game.width,vars.game.height,'snow-bg-2').autoScroll(-50,0);
vars.game.add.tileSprite(0, 0, vars.game.width, vars.game.height, 'snow-bg').autoScroll(-100,0);
vars.logo = vars.game.add.sprite(vars.game.width / 2 - 158, 20, 'logo');
vars.logo.alpha = 0;
vars.game.add.tween(vars.logo).to({
alpha:1
},1000,Phaser.Easing.Linear.None,true,0);
vars.startBtn = vars.game.add.button(vars.game.width/2-89,vars.game.height -120,'startbtn',function(){ vars.game.state.start('Game');});
vars.startBtn.alpha = 0;
vars.game.add.tween(vars.startBtn).to({
alpha:1
},1000,Phaser.Easing.Linear.None,true,1000); }
}
//game.js 游戏主逻辑
import vars from './public.js'; export default {
create : function(){
vars.gameScore = 0;
vars.currentFrame = 0;
vars.particleInterval = 2*60;
vars.gameSpeed = 580;
vars.isGameOver = false;
vars.game.physics.startSystem(Phaser.Physics.ARCADE);
vars.bg_heaven = vars.game.add.tileSprite(0, 0, vars.game.width,vars.game.height, 'snow-bg-2').autoScroll(-50,0);
vars.bg = vars.game.add.tileSprite(0, 0, vars.game.width, vars.game.height, 'snow-bg');
vars.bg.fixedToCamera = true;
vars.bg.autoScroll(-vars.gameSpeed / 6, 0);
vars.platforms = vars.game.add.group();
vars.platforms.enableBody = true;
vars.platforms.createMultiple(5,'platform',0,false);
vars.platforms.setAll('anchor.x',0.5)
vars.platforms.setAll('anchor.y',0.5)
var plat;
for (var i = 0; i < 5; i++) {
plat = vars.platforms.getFirstExists(false);
plat.reset(i * 192, vars.game.world.height - 44);
plat.width = 300*0.6;
plat.height = 88*0.6;
vars.game.physics.arcade.enable(plat);
plat.body.immovable = true;
plat.body.bounce.set(0);
}
vars.lastPlatform = plat;
vars.man = vars.game.add.sprite(100,vars.game.height - 200,'santa-running');
vars.man.animations.add('run');
vars.man.animations.play('run',15,true);
vars.man.width = (493/5)*0.5;
vars.man.height = 174*0.5;
vars.game.physics.arcade.enable(vars.man);
vars.man.body.gravity.y = 1500;
vars.man.body.collideWorldBounds = true;
vars.game.camera.follow(vars.man);
vars.cursors = vars.game.input.keyboard.createCursorKeys();
vars.spacebar = vars.game.input.keyboard.addKey(Phaser.Keyboard.SPACEBAR);
vars.score = vars.game.add.text(20,20,'',{
font: '24px Arial',
fill: 'white'
});
},
update:function(){
if (!vars.isGameOver) {
vars.gameScore += 0.5;
vars.gameSpeed += 0.03;
vars.score.text = 'Score:' + Math.floor(vars.gameScore);
vars.currentFrame++;
var moveAmount = vars.gameSpeed / 100;
vars.game.physics.arcade.collide(vars.man,vars.platforms);
if (vars.man.body.bottom >= vars.game.world.bounds.bottom) {
vars.isGameOver = true;
vars.endGame();
}
if (vars.cursors.up.isDown && vars.man.body.touching.down || vars.spacebar.isDown && vars.man.body.touching.down|| vars.game.input.mousePointer.isDown && vars.man.body.touching.down || vars.game.input.pointer1.isDown && vars.man.body.touching.down) {
vars.man.body.velocity.y = -500;
}
vars.platforms.children.forEach(function(platform){
platform.body.position.x -= moveAmount;
if (platform.body.right <= 0) {
platform.kill();
var plat = vars.platforms.getFirstExists(false);//获得第一个不存在的子元素,参数为true则为获得第一个存在的子元素
plat.reset(vars.lastPlatform.body.right + 192,vars.game.world.height - Math.floor(Math.random() * 50) -24);
plat.body.immovable = true;
vars.lastPlatform = plat;
}
});
}
}
}

最后可以就可以通过webpack开始打包了

基于ES6模块标准通过webpack打包HTM5项目的更多相关文章

  1. webpack打包vue项目之后生成的dist文件该怎么启动运行

    亲测,webpack打包vue项目之后生成的dist文件可以部署到 express 服务器上运行. 我的vue项目结构如下: 1. 进入该vue项目目录,打开git bash,执行:npm run b ...

  2. 如何使用webpack打包前端项目

    webpack概述 随着前端体积越来越大,功能越来越丰富,这时候就需要将前端工程化,而 webpack就是用于将前端各种文件打包起来. 一个简单的webpack应该包含以下几个概念 · 入口起点 · ...

  3. 《你不知道的JavaScript -- 上卷》笔记 --- 基于ES6新标准

    1.let A:let关键字:将变量绑定到所在的任意作用域 function process(){ //do something } //在这个块中定义的内容完事就可以销毁 { let someRea ...

  4. Webpack入门——使用Webpack打包Angular项目的一个例子

    2016.1.22,对大多数人来说,这是一个非常平常的日子,但这却是我决定在博客园写博客的日子.虽然注册博客园的博客已有4年8个月,却一直没有动手写过一篇博客,原因是觉得自己水平不行,写不出好东西,所 ...

  5. 16.如何做到webpack打包vue项目后,可以修改配置文件

    问题描述: 前端需要修改restful API的url,但是打包之后,配置文件找不到了,如果在npm run build 生成dist后,这个配置也被写死了,传到运行的前端服务器上后,假设某次,api ...

  6. Docker + webpack 打包前端项目

    码云代码地址: https://gitee.com/caonimashi/docker_deployment_front_end    构建基础镜像: 1.下载一个 Apline Linux 操作系统 ...

  7. webpack打包nodejs项目(前端代码)

    PS.若本文没有帮到你可以看看我的进阶版点此前往 适用情况 首先说明,此情况不具备普遍性.若你的情况与笔者类似那么希望这篇文章能够帮到你. 我的项目情况是这样的:用node.js做后台,ejs做模板引 ...

  8. webpack打包vue项目,资源路径如何从绝对路径改为相对路径?css中的图片资源如何修改配置?

    资源相对引用路径 问题描述 一般情况下,通过webpack+vuecli默认打包的css.js等资源,路径都是绝对的. 但当部署到带有文件夹的项目中,这种绝对路径就会出现问题,因为把配置的static ...

  9. 如何做到在webpack打包vue项目后,在外部动态修改配置文件

    在我们做完vue项目后,只需要执行 npm run dist 就可以轻松进行打包转测试,可是如果我们临时需要修改一些配置文件比如域名,这时候我们就有点懵逼了,那就修改了再重新打一次包? NO NO N ...

随机推荐

  1. 一分钟完成MySQL5.7安装部署

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://suifu.blog.51cto.com/9167728/1855415 Part ...

  2. IOS 消息

    发送消息: NSDictionary *dict=[[NSDictionary alloc]initWithObjectsAndKeys:@"num",[NSString stri ...

  3. 让win7安装时出现版本选项

    win7有几种版本,win7旗舰版包含各大版本,修改一下ISO,让安装时出现版本选项窗口: 1.准备好一个官方win7旗舰版安装包IOS光盘镜像. 2.用UltraISO打开光盘镜像并删除source ...

  4. 勘误《iOS网络高级编程:iPhone和iPad的企业应用开发》

    VII页 , 倒数第二行, “其他” 应为 “其它” X页, 源代码有错误,说是有19章,实际一共13章 XI页,勘误表的链接也是错误的  .是该书的<Beginning ASP.NET 4.5 ...

  5. delphi TServerSocket的多线程

    http://blog.sina.com.cn/s/blog_471218c2010001qc.html unit U_dxc; interface uses  Windows, Messages, ...

  6. ThinkPHP 模板的包含、渲染、继承

    一.模板包含        <include file="完整模板文件名" />        <include file="./Tpl/default ...

  7. atoi

    , KInvalid}; int g_nStatus=kValid; int StrToInt(const char *str) { g_nStatus=KInvalid; ; if((str!=NU ...

  8. js实现数组去重并且显示重复的元素和索引值

    var arr=["a","b","c","d","c","b","d ...

  9. 部署JForum 2.1.9遇到的问题及解决方法

    1. 主要问题是出在连接数据库和创建表阶段,当我们配置好MySQL的各种参数后,创建表的时候会报错: 原因:主要是由于建表的SQL语句和MySQL的版本不一致导致的. 解决办法:简单来说,在MYSQL ...

  10. jQ小图标上下滑动特效

    嗯,又到了,夜静饥寒的时候,手指颤抖,回望去,屋内满是寂静,寥寥绰影,咳咳咳,想我程序员之路还没到终点...就...咳咳咳 好了日常神经结束,还要涂我的唇膏.还剩下,最后一章,js动画(四),明天放上 ...