上一节咱们搭建了游戏的骨架,添加了四个游戏场景,分别是加载、开始、游戏、结束。那么这一节咱们来介绍加载这个场景,顺带丰富一下各个场景的基本内容。web
Phaser框架自带的一个loader,支持加载多种类型的资源,下面是离线文档中的介绍的截图,详细的API能够查阅文档得知。json
介绍几个经常使用的加载资源的方法:(下列代码中的game默认为Phaser实例,经过new Phaser.Game赋值)segmentfault
game.load.image('star', 'star.png');
game.load.audio('bg', 'bg.mp3)');
因为要指定帧的宽高,所以通常是动画的连续帧,例如行走动画的每一帧合成的图片。跨域
game.load.spritesheet('walk', 'walk.png', 80, 80);
一样能够用做加载图片序列,但这种用法主要用于加载相似于TexturePacker打包出来的资源集合。相比于spritesheet通常是一连串的动画帧合成的图片,这种资源集合中的图片能够是各类各样的,和咱们日常作网站会将icon、背景图片等合成sprites一个道理。
打包出来的资源通常包括一个json和一张合成的图片,json描述了合成图片中每张图片的宽高位置等信息。框架
game.load.altasJSONArray('fly', 'fly.png', 'fly.json');
上一节咱们提过每一个场景都有本身的生命周期,所以加载资源的操做应放在preload这个阶段执行。当preload中的资源加载完毕后,则preload场景将进入create阶段,示例代码以下:动画
// 加载场景 preload: function() { this.preload = function() { // 设置背景为黑色 game.stage.backgroundColor = '#000000'; // 加载游戏资源 game.load.crossOrigin = 'anonymous'; // 设置跨域 game.load.image('bg', '//24haowan-cdn.shanyougame.com/pickApple2/assets/images/bg.png'); game.load.image('dude', '//24haowan-cdn.shanyougame.com/pickApple2/assets/images/dude.png'); game.load.image('green', '//24haowan-cdn.shanyougame.com/pickApple2/assets/images/green.png'); game.load.image('red', '//24haowan-cdn.shanyougame.com/pickApple2/assets/images/red.png'); game.load.image('yellow', '//24haowan-cdn.shanyougame.com/pickApple2/assets/images/yellow.png'); game.load.image('bomb', '//24haowan-cdn.shanyougame.com/pickApple2/assets/images/bomb.png'); game.load.image('five', '//24haowan-cdn.shanyougame.com/pickApple2/assets/images/five.png'); game.load.image('three', '//24haowan-cdn.shanyougame.com/pickApple2/assets/images/three.png'); game.load.image('one', '//24haowan-cdn.shanyougame.com/pickApple2/assets/images/one.png'); game.load.audio('bgMusic', '//24haowan-cdn.shanyougame.com/pickApple2/assets/audio/bgMusic.mp3'); }, this.create = function() { alert('加载完毕!'); } }
示例代码:https://jsfiddle.net/Vincent_...网站
一般来讲咱们都须要反馈加载进度,例如一个进度条,或者是一个百分比的数字。因而咱们接下来就须要监听加载完成的事件了。this
// 监听加载完毕事件 game.load.onLoadComplete.add(function() { alert('加载完毕!'); });
若是咱们须要监听到加载的进度,那么能够用下面的方法:spa
// 添加进度文字 var progressText = game.add.text(game.world.centerX, game.world.centerY, '0%', { fontSize: '60px', fill: '#ffffff' }); progressText.anchor.setTo(0.5, 0.5); // 设置锚点,用于居中 // 监听加载完一个文件的事件 game.load.onFileComplete.add(function(progress) { progressText.text = progress + '%'; });
示例代码: https://jsfiddle.net/Vincent_....net
通常而言,咱们作游戏都会在loading界面放一个LOGO,做为展现宣传用,那么若是须要加载的资源体积很小的话,有可能加载界面就是一闪而过了。因而,根据咱们开发的经验,会设置一个最小的展现时间(例如3秒),在未到最小的展现时间前,即使资源已经加载完毕,也不会离开加载场景。
// 监听加载完毕事件 game.load.onLoadComplete.add(onLoad); // 最小展现时间,示例为3秒 var deadLine = false; setTimeout(function() { deadLine = true; }, 3000); // 加载完毕回调方法 function onLoad() { if (deadLine) { // 已到达最小展现时间,能够进入下一个场景 game.state.start('created'); } else { // 尚未到最小展现时间,1秒后重试 setTimeout(onLoad, 1000); } }
示例代码:https://jsfiddle.net/Vincent_...
// 开始场景 created: function() { this.create = function() { // 添加背景 var bg = game.add.image(0, 0, 'bg'); bg.width = game.world.width; bg.height = game.world.height; // 添加标题 var title = game.add.text(game.world.centerX, game.world.height * 0.25, '小恐龙接苹果', { fontSize: '40px', fontWeight: 'bold', fill: '#f2bb15' }); title.anchor.setTo(0.5, 0.5); // 添加提示 var remind = game.add.text(game.world.centerX, game.world.centerY, '点击任意位置开始', { fontSize: '20px', fill: '#f2bb15' }); remind.anchor.setTo(0.5, 0.5); // 添加主角 var man = game.add.sprite(game.world.centerX, game.world.height * 0.75, 'dude'); var manImage = game.cache.getImage('dude'); man.width = game.world.width * 0.2; man.height = man.width / manImage.width * manImage.height; man.anchor.setTo(0.5, 0.5); // 添加点击事件 game.input.onTap.add(function() { game.state.start('play'); }); } }
示例代码中使用了input的onTap事件,那么input实际上还有其余事件,例以下图中框住的就是咱们最经常使用的几个事件:
onDown - 对应touchstart/mousedown
onUp - 对应touchend/mouseup
onHold - 封装了长按事件的实现
onTap - 封装了点击事件的实现
另外还有滑动事件:
示例代码:https://jsfiddle.net/Vincent_...
这一节咱们介绍了加载场景,分步骤介绍了加载资源、监听加载完成的事件以及添加一个最小的加载展现时间,其中“添加一个最小的加载展现时间”是偏实际应用的内容,非必须。
在文章的最后咱们还向场景中加入了主角、背景、标题和开始提示等元素,来丰富开始场景。顺带一说,此次的示例是作一个接苹果的游戏,一句话说完就是控制主角接住每个从天上掉下来的苹果,不然就算输。
那么如何利用这些资源构建出游戏的玩法,苹果怎么掉,怎么控制主角等等,将是下一节的内容。
回顾: