State的创建方式,以及相应的preload、create、update等成员函数的定义

前言

使用Phaser框架做一个游戏,首先的步骤就是:1、创建一个游戏实例(Game),2、创建一个或多个游戏场景(State)…… 其中的创建游戏场景(State)有多种方式,可能也有很多像我一样的小白,刚开始傻傻的一脸懵逼,在此分享一下本人整理的知识点,希望不会误认子弟。

在StateManage的add()源码中看到,我们至少有三种方式来创建State; StateManage.add.png

下面列举一下创建State的三种方式,以及相应的preload、create、update等成员函数的定义方式

1、State的三种创建方式:

    var state = new Phaser.State(); // 由Phaser.State类创建实例
    var state = {}; // 直接创建静态对象
    var state = function(){}; 或 function state(){}; // 创建一个function

2、State中的preload、create、update等成员函数的定义方式:

A)由Phaser.State类创建实例时:
    var state = new Phaser.State();
    state.create = function(){};  // 定义实例的静态函数
    //不能这样定义:state.prototype.create = function(){};  // 因为实例对象没有prototype,会报错
B)直接创建静态对象时:
    var state = {create:function(){}}; // 直接在对象内部定义
    state.create = function(){};       // 在对象外部定义也一样
    //也不能这样定义:state.prototype.create = function(){}; // 静态对象也没有prototype,会报错
C)创建一个function时:
   var state = function(){
        var _vars = "构造函数内的私有变量";
        this.create = function(){ // 可以通过this在构造函数里面定义
            console.log(_vars);     // 可以访问_vars
        };
        //不能这样定义: var create = function(){};  // 这是本构造函数内的私有函数,外部是无法访问的
    };
    state.prototype.create = function(){  // 也可以通过原型链在构造函数外面定义
        console.log(_vars);     // 但不可以访问_vars,(undefined)
    };
    //不能这样定义:state.create = function(){}; // 这是定义了静态函数,通过new出来的实例访问不到静态函数

OK,也就写这么多了,祝大家入坑顺利!