第二部分 显示对象(粒子 瓦片地图)
学习笔记:粒子系统部分。这部分效果在上,代码在下面。
1 粒子系统
效果
代码:
var game = new Phaser.Game(800, 500, Phaser.AUTO, 'container', state); function state(){ this.init = function(){ game.scale.pageAlignHorizontally = true; //水平居中 game.scale.pageAlignVertically = true; //垂直居中 } this.preload = function(){ game.load.image('bubble', 'asset/bubble.png'); } this.create = function(){ var emitter = game.add.emitter(game.width/2, game.height/2, 50); emitter.makeParticles('bubble'); //emitter.setXSpeed(500, 1000);//X轴上的速度,最小值最大值 //emitter.setYSpeed(500, 1000); emitter.setScale(0, 1, 0, 1, 3000);//缩放: X最小 X最大 Y最小 Y最大 过渡时间(从最小值到最大值的过渡) emitter.setAlpha(0, 1, 3000);//最小值 最大值,有过渡动画的时间 emitter.setRotation(100, 200);//设置角速度 emitter.start(true, 3000, 1000, 50);//start方法发射粒子:一次一个还是一次全部,生存时间,发射间隔,发射数量 } }
效果
代码
var game = new Phaser.Game(800, 500, Phaser.AUTO, 'container', state); function state(){ this.init = function(){ game.scale.pageAlignHorizontally = true; //水平居中 game.scale.pageAlignVertically = true; //垂直居中 } this.preload = function(){ game.load.spritesheet('fruits', 'asset/fruits.png', 32, 32); } this.create = function(){ var emitter = game.add.emitter(game.width/2, game.height/2, 100); emitter.makeParticles('fruits', [0,1,2,3,4,5,6,7,8,9,10,11]);//会从数组中随机出一个 emitter.flow(3000, 1000, 50, -1); //生存周期(设为0就会永远都不消失),多久一次,每次多少个 ,总共多少个粒子(值为-1是无数我个) } }
效果
代码
var game = new Phaser.Game(800, 500, Phaser.AUTO, 'container', state); function state(){ this.init = function(){ game.scale.pageAlignHorizontally = true; //水平居中 game.scale.pageAlignVertically = true; //垂直居中 } this.preload = function(){ game.load.image('ball', 'asset/ball.png'); } var emitter; this.create = function(){ emitter = game.add.emitter(game.width/2, game.height/2); emitter.makeParticles('ball', '', 100, true, true); emitter.setYSpeed(-600, -300); emitter.setXSpeed(-300, 300); emitter.setScale(0.1, 1, 0.1, 1, 3000); emitter.gravity = 600;//重力加速度 emitter.bounce.y = 0.8;//反弹强度 1为原高度,0为不反弹 emitter.flow(0, 3000, 1, 100); } this.update = function(){ game.physics.arcade.collide(emitter); } }
2 瓦片地图
var game = new Phaser.Game(800, 400, Phaser.AUTO, 'container', state); function state(){ this.init = function(){ game.scale.pageAlignHorizontally = true; //水平居中 game.scale.pageAlignVertically = true; //垂直居中 } this.preload = function(){ game.load.tilemap('mario_map', 'asset/tilemap/mario.json', null, Phaser.Tilemap.TILED_JSON); game.load.image('mario', 'asset/tilemap/mario.png'); } this.create = function(){ var map = game.add.tilemap('mario_map');//创建地图Map, map.addTilesetImage('super_mario', 'mario');//第一个参数是用TILED创建地图时那个瓦片图片的名字,第二个参数是你在这个游戏中加载进来的瓦片图片的KEY var layer = map.createLayer('world');//创建层,这个层就是你在TILED中层的名字 } }
对瓦片地图的一些操作
var game = new Phaser.Game(800, 400, Phaser.AUTO, 'container', state); function state(){ this.init = function(){ game.scale.pageAlignHorizontally = true; //水平居中 game.scale.pageAlignVertically = true; //垂直居中 } this.preload = function(){ game.load.tilemap('mario_map', 'asset/tilemap/mario.json', null, Phaser.Tilemap.TILED_JSON); game.load.image('mario', 'asset/tilemap/mario.png'); } this.create = function(){ var map = game.add.tilemap('mario_map'); map.addTilesetImage('super_mario', 'mario'); var layer = map.createLayer('world'); //获取指定位置上的瓦片 var tile = map.getTile(0, 24); //在指定的位置设置指定的瓦片 map.putTile(tile, 0, 0); //在指定区域填充指定的瓦片,第一个参数是瓦片的索引,从1开始,后面的是左上和右下 //map.fill(12, 0, 0, 20, 20); //瓦片的复制和粘贴 //var tiles = map.copy(0, 19, 5, 5); //map.paste(0, 0, tiles); //在指定区域内用一种瓦片替换另一种瓦片 //map.replace(1, 12); } }
加进人物和控制及碰撞
var game = new Phaser.Game(800, 400, Phaser.AUTO, 'container', state); function state(){ var layer, player, cursors; this.init = function(){ game.scale.pageAlignHorizontally = true; //水平居中 game.scale.pageAlignVertically = true; //垂直居中 } this.preload = function(){ game.load.tilemap('mario_map', 'asset/tilemap/mario.json', null, Phaser.Tilemap.TILED_JSON); game.load.image('mario', 'asset/tilemap/mario.png'); game.load.image('player', 'asset/tilemap/player.png'); } this.create = function(){ var map = game.add.tilemap('mario_map'); map.addTilesetImage('super_mario', 'mario'); layer = map.createLayer('world'); layer.resizeWorld(); //调整世界大小为地图大小 //设置需要碰撞的瓦片 map.setCollisionBetween(15, 16); map.setCollisionBetween(20, 25); map.setCollisionBetween(27, 29); map.setCollision(40); game.physics.startSystem(Phaser.Physics.ARCADE);//物理引擎 player = game.add.sprite(32, 32, 'player'); game.physics.enable(player);//为游戏人物启用物理引擎 game.physics.arcade.gravity.y = 250;//重力 player.body.bounce.y = 0.2;//碰撞后弹回的设置 game.camera.follow(player);//摄像机跟随人物 cursors = game.input.keyboard.createCursorKeys();//键盘控制快捷方法 } this.update = function(){ game.physics.arcade.collide(player, layer);//碰撞检测 player.body.velocity.x = 0; if (cursors.up.isDown){ if (player.body.onFloor()){ player.body.velocity.y = -250; } } if (cursors.left.isDown){ player.body.velocity.x = -150; }else if (cursors.right.isDown){ player.body.velocity.x = 150; } } }