Phaser.js 获取给定的无效 Phaser 状态对象

Posted

技术标签:

【中文标题】Phaser.js 获取给定的无效 Phaser 状态对象【英文标题】:Phaser.js getting Invalid Phaser state object given 【发布时间】:2016-02-26 03:07:25 【问题描述】:

我目前正在尝试使用 Phaser 2d 游戏引擎。

我目前有这段代码:

// Generated by CoffeeScript 1.10.0
(function() 
  var create, game, preload, update;

  game = new Phaser.Game(800, 600, Phaser.AUTO, '', 
    preload: preload,
    create: create,
    update: update
  );

  preload = function() 
    return game.load.atlasJSONHash('seyan_f_torch', '../sprite_hashes/seyan_f_torch.png', '../sprite_hashes/seyan_f_torch.json');
  ;

  create = function() 
    var seyan_f_torch;
    seyan_f_torch = game.add.sprite(0, 180, 'seyan_f_torch', '00219000.png');
    seyan_f_torch.animations.add('walk-down', Phaser.Animation.generateFrameNames('', 219016, 219023, 9), 10, true, false);
  ;

  update = function() ;

).call(this);

然后当我尝试加载它时,我得到了这个:

给定的 Phaser State 对象无效。必须包含至少一个必需的函数:preload、create、update 或 render phaser.js:34530

Phaser v2.4.6 | Pixi.js v2.2.9 | WebGL |网络音频http://phaser.io♥♥♥

Uncaught TypeError: Cannot set property 'game' of undefined phaser.js:29106

不知道这里出了什么问题。任何信息都将非常感谢。

....

这是实际的 CS 文件:

game = new (Phaser.Game)(800, 600, Phaser.AUTO, '',
    preload: preload
    create: create
    update: update)
    
    
preload = ->
    game.load.atlasJSONHash 'seyan_f_torch', '../sprite_hashes/seyan_f_torch.png', '../sprite_hashes/seyan_f_torch.json' 

create = ->
    # Create Seyan_F_Torch
    seyan_f_torch = game.add.sprite(0, 180, 'seyan_f_torch', '00219000.png')
    seyan_f_torch.animations.add('walk-down', Phaser.Animation.generateFrameNames('', 219016, 219023, 9), 10, true, false);
    setTimeout ->


update = ->

【问题讨论】:

【参考方案1】:

我不使用 CoffeeScript,但我认为问题在于您没有将 Object 传递给 Game 构造函数。 Phaser 需要从格式良好的状态对象开始。您可以在 Phaser.State 类中找到一个示例(在 src/core/State.js 中的 repo 中)。您可能需要做的就是:

game = new (Phaser.Game)(800, 600, Phaser.AUTO, '',
     preload: preload,
    create: create,
    update: update
)

【讨论】:

谢谢,我本来打算回来编辑我的问题,之所以这样,是因为 cs 正在将我的函数转换为函数表达式。【参考方案2】:

我遇到了同样的问题,发现函数语法对 Phaser 很重要。

代替

preload = function() 
;

应该是

function preload() 
;

【讨论】:

以上是关于Phaser.js 获取给定的无效 Phaser 状态对象的主要内容,如果未能解决你的问题,请参考以下文章

从零到一:用Phaser.js写意地开发小游戏(Chapter 1 - 认识Phaser.js)

Phaser.js 源码阅读之旅

从零到一:用Phaser.js写意地开发小游戏(Chapter 2 - 搭建游戏的骨架)

从零到一:用Phaser.js写意地开发小游戏(Chapter 2 - 搭建游戏的骨架)

phaser小游戏框架学习

使用 Phaser.js 和 Ionic 开发游戏应用程序(缓慢/不稳定的渲染)