Phaser学习(1)

2021-07-15  本文已影响0人  Lucky胡

一、Phaser初始化:

var game = new Phaser.Game(config);

//其中config完成各种配置
var config = {
      type : Phaser.AUTO,
      width : 800,
      height : 600,
      scene : {
          preload : preload,
          create : create,
          update : update
      }
}

function preload(){}

function create(){}

function update(){}

其中属性type有3种,Phaser.CANVAS/Phaser.WEBGL/Phaser.AUTO。

二、加载资源
需要在preload时,将资源加载好。
调用load方法,加载资源。

function preload(){
      //加载图片
      this.load.image('sky','assets/sky.png');
      //加载图片表单
      this.load.spritesheet('dude','assets/dude.png',
      {frameWidth:32,frameHeight:48});
}

资源加载完成后,就可以在create函数里,将图片显示出来。

this.add.image(400,300,'sky');

显示图片方法image(),前面400,300是放置图片的位置。
因为默认坐标系是以图片中心点为0,0点。

三、物理系统
要使用物理系统,需要配置使用的物理系统。我们采用Arcade物理系统。

var config = {
...
      physics:{
          default:'arcade',
          arcade:{
              gravity:{y:300},
              debug:false
          }
      }
...
}

在Arcade物理系统中,分为静态和动态物体body。

动态物体可以动,会跟其他物体发生碰撞,反弹。

静态物体不能用,不受重力/碰撞影响。

“组”可以把近似对象组织在一起。

//生成静态物理组
var platforms = this.physics.add.staticGroup();

platforms.create(400,568,'ground');

四、物理精灵
通过物理系统生成一个动态物体,物理精灵。

var player;
player = this.physics.add.sprite(100,450,'dude');

//设置物体碰撞反弹
player.setBounce(0.2);

//设置物体不能跑出屏幕
player.setCollideWorldBounds(true);

五、动画
自定义动画:

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.physics.add.collider(player,platforms);

六、键盘监控
提供了键盘监控方法。

var cursors = this.input.keyboard.createCursorKeys();

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');
}

//按键方向键up按下,则起跳。并且还要检测player的下面是否在地面
if(cursors.up.isDown && player.body.touching.down){
player.setVelocityY(-330);
}

设置动态组


        stars = this.physics.add.group({
           key:'star',
           repeat:11,
           setXY:{
               x:12,
               y:0,
               stepX:70
           }
        });
        stars.children.iterate(function (child){
           child.setBounceY(Phaser.Math.FloatBetween(0.4,0.6));
        });
        //检测碰撞
        this.physics.add.collider(stars,platforms);

添加文本显示


var        scoreText = this.add.text(16,16,'score:0',
            {
                fontSize:'32px',
                fill: '#000'
            });
上一篇 下一篇

猜你喜欢

热点阅读