Phaser学习笔记

physicsandprefabs

Prefab

Prefab的字面意思是“预先装配”

在我们的教程中,一个Prefab就是一个游戏对象,它能被设置,能够被实例化多次。并且每次实例化时都有基本的属性。在游戏开发中是一个简单术语,主要针对classes/prototypes实现的预先定义好视觉和行为的游戏对象。

打开play.js文件,移去create和update函数中的所有代码。结果如下下:

  'use strict';
  function Play() {}
  Play.prototype = {
    create: function() {
    },
    update: function() {
  };

  module.exports = Play;

为了便于调试,同时也编辑一下preload.js文件,将初始的状态改为’play‘,以便我们直接进入play状态,而不再需要点击menu中的开始按钮。


update: function() {  
      if(!!this.ready) {
        //便于调试,将menu改为play
        this.game.state.start('play');
      }
    }

现在我们有一个干净的状态。让我们开始做一件制作游戏最重要的一件事。

开启物理引擎

我们打算在我们游戏中采用Phaser的Arcade 物理引擎,主要是因为它的简单性。

回到play.js,在create()函数的最上方,增加如下代码:

create: function() {  
    this.game.physics.startSystem(Phaser.Physics.ARCADE);
}

上面代码告诉Phaser框架,我们使用Arcade 物理引擎。当Phaser运行到该行时,它不单单的告诉我们的游戏在每一帧中开始运行物理模拟,它做了一整套的内部逻辑。

设置重力

针对游戏设置全局重力是相当的容易。代码如下:

create: function() {  
    this.game.physics.startSystem(Phaser.Physics.ARCADE);
    this.game.physics.arcade.gravity.y = 500;
}

现在,加入游戏的每一个具有物理体的sprite将以最大速率为每秒500像素的速率加速落入地面。

我们实际上应当把这句代码在以后的教程中引入,但由于我们有特殊的考虑,先加入代码,别关注具体细节。

增加背景

create: function() {  
    /* 物理引擎和重力设置*/

    // 增加背景
    this.background = this.game.add.sprite(0,0,'background');
}

查看浏览器,可以发现我们已经加载了背景图片。但是注意,虽然我们加入了物理引擎和重力设置,但是背景却没有下落,这是因为背景的物理特性没有设置。

产生一个预制对象

我们创建一个biid预制对象,它包含所有行为和指导小鸟移动发现的代码。进入系统终端并进入工程目录,执行如下命令:

yo phaser-official:prefab "bird"

这儿有一些预先的提示如下:

yo phaser-official:prefab bird
Creating the new prefab: bird  
[?] What is the name of your prefab? bird
[?] What sprite key would you like to use? bird
   create game/prefabs/bird.js

j