前言
使用Phaser框架做一个游戏,首先的步骤就是:1、创建一个游戏实例(Game),2、创建一个或多个游戏场景(State)…… 其中的创建游戏场景(State)有多种方式,可能也有很多像我一样的小白,刚开始傻傻的一脸懵逼,在此分享一下本人整理的知识点,希望不会误认子弟。
在StateManage的add()源码中看到,我们至少有三种方式来创建State;
下面列举一下创建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,也就写这么多了,祝大家入坑顺利!