一般phaser最简单的配置文件如下:
let config = {
type: Phaser.AUTO,
width: 800,
height:600,
scene: {
preload: preload,
create: create,
update: update
},
physics:{
default: 'arcade',
arcade: {
gravity: { y: 300},
debug: false
}
}
};
其中scene有3个函数:preload、create、update
preload:是在create函数前调用的,一般用于资源的加载;
create:preload完成后,就会调用到这函数,这个函数一般用于构造界面,关联玩家键盘,游戏大部分逻辑事件等等等;
update:会按周期进行调用,一般用于键盘控制玩家,玩家坐标更新等。
下面是player键盘控制,首先定义变量:
let player;
create函数中奖player构造成精灵,并且设置好回弹参数以将碰撞属性设置为true:
player = this.physics.add.sprite(100, 450, 'dude');
player.setBounce(0.2);
player.setCollideWorldBounds(true);
如果给出的精灵是这样的:
那么还需要创建动画,方便后边的键盘操作,上面的精灵是个横版的图,左边4幅是左,中间那一幅是停止的,右边4幅是右走。
this.anims.create({
key: 'left',
frames: this.anims.generateFrameNumbers('dude', {start: 0, end: 3}),
frameRate: 10,
repeat: -1
});
this.anims.create({
key: 'turn',
frames: [{key: 'dude', frame: 4}],
frameRate: 20
});
this.anims.create({
key: 'right',
frames: this.anims.generateFrameNumbers('dude', {start: 5, end: 8}),
frameRate: 10,
repeat: -1
});
比如横版游戏中有个platforms,玩家可以站在平台上:
this.physics.add.collider(stars, platforms);
在平台上有些加分道具(如stars),当玩家捡到(重叠)到加分道具会执行对应的回调函数:
this.physics.add.overlap(player, stars, collectStar, null, this);
其中stars是变量,collectStar是回调函数。
同样平台上还会有一些敌人,如果玩家接触到这些敌人也会触发对应的回调函数:
this.physics.add.collider(player, bombs, hitBomb, null, this);
其中hitBomb就是回调函数。
关于键盘首先定义cursor变量:
let cursors;
在create函数中创建光标:
cursors = this.input.keyboard.createCursorKeys();
在update函数中通过按下不同的键盘干不同的事情:
function update(){
if(cursors.left.isDown){
}
else if(cursors.right.isDown){
}
else{
}
if(cursors.up.isDown && player.body.touching.down) {
}
}
分别是左键被按下,右键被按下,跳起一次。
如将玩家(精灵)在不同操作下,设置不同的X,Y轴坐标,以及播放不同的动画。
function update(){
if(cursors.left.isDown){
player.setVelocityX(-160);
player.anims.play('left', true);
}
else if(cursors.right.isDown){
player.setVelocityX(160);
player.anims.play('right', true);
}
else{
player.setVelocityX(0);
player.anims.play('turn', true);
}
if(cursors.up.isDown && player.body.touching.down) {
player.setVelocityY(-330);
}
}