地图
对于Tiled的学习并不好,所以只能是简单的做一个地图,两个层
tilemap 为什么HTML里的代码总会丢失呢?
接下来,把人物加进去
人在层上,并且没有障碍,还得加东西
加了碰撞后居然没有碰撞检测?
换一个看看:
再改一个看看:
var game = new Phaser.Game(640, 480, Phaser.AUTO, 'container', state);
function state() {
var man;
var jz;
var cursors;
var dm;
this.init = function() {
game.scale.pageAlignHorizontally = true; //水平居中
game.scale.pageAlignVertically = true; //垂直居中
game.stage.setBackgroundColor(0xffffee);
}
this.preload = function() {
game.load.tilemap('mario_map', 'asset/dom4.json', null, Phaser.Tilemap.TILED_JSON);
game.load.image('mario', 'asset/tiled/zh.png');
game.load.spritesheet('man', 'asset/zgf.png', 32, 48);
}
this.create = function() {
var map = game.add.tilemap('mario_map'); //创建地图Map,
map.addTilesetImage('zh', 'mario'); //第一个参数是用TILED创建地图时那个瓦片图片的名字,第二个参数是你在这个游戏中加载进来的瓦片图片的KEY
var db = map.createLayer('db');
dm = map.createLayer('qw'); //创建层,这个层就是你在TILED中层的名字
za = map.createLayer('za');
man = game.add.sprite(48, 0, 'man');
//jz = map.createLayer('jz'); //创建层,这个层就是你在TILED中层的名字
dm.resizeWorld(); //调整世界大小为地图大小
//设置需要碰撞的瓦片
map.setCollisionBetween(24, 32, true, dm);
//map.setCollisionBetween(107, 109,true,jz);
//进行范围设置(开始索引,终止索引,布尔值 是否进行碰撞检测,在哪个层进行检测)
//map.setCollision(141, true, dmzs); //使用方法:({瓦片索引,可以是一个,也可以是组},布尔值 是否进行碰撞检测,在哪个层进行检测)
//map.setCollision(142, true, dmzs);
//map.setCollision([17,18,237,251]);
//map.setCollision([5,6],true);
man.animations.add('qian', [0, 1, 2, 3]);
man.animations.add('left', [4, 5, 6, 7]);
man.animations.add('you', [8, 9, 10, 11]);
man.animations.add('hou', [12, 13, 14, 15]);
game.physics.startSystem(Phaser.Physics.ARCADE); //物理引擎
game.physics.enable(man); //为游戏人物启用物理引擎
game.physics.arcade.gravity.y = 250; //重力
man.body.bounce.y = 0.2; //碰撞后弹回的设置
game.camera.follow(man); //摄像机跟随人物
cursors = game.input.keyboard.createCursorKeys(); //键盘控制快捷方法
}
this.update = function() {
game.physics.arcade.collide(man, dm); //碰撞检测
//man.body.velocity.x = 0;
/*if (cursors.up.isDown) {
man.play('hou', 5, true);
if (man.y > 0) {
man.body.y -= 2;
}
} else if (cursors.down.isDown) {
man.play('qian', 5, true);
if (man.y < 480-48) {
man.body.y += 2;
}
} else if (cursors.left.isDown) {
man.play('left', 5, true);
if (man.x > 0) {
man.body.x -= 2;
}
} else if (cursors.right.isDown) {
man.play('you', 5, true);
if (man.x < 640-32) {
man.body.x += 2;
}
} else {
man.animations.stop();
}*/
if (cursors.up.isDown) {
if (man.body.onFloor()) {
man.body.velocity.y = -250;
}
}
if (cursors.left.isDown) {
man.play('left', 5, true);
man.body.x -= 2;
} else if (cursors.right.isDown) {
man.play('you', 5, true);
man.body.x += 2;
} else {
man.animations.stop();
}
}
}