Phaser 模块模式和精灵

Phaser Module Pattern and Sprites

我正在使用 Phaser 并使用模块模式,创建一个具有 Object.create(Phaser.Sprite.prototype) 原型的模块,并在主模块中创建一个实例。

问题是 sprite 似乎是在 create 函数的主模块中创建的,但是 sprite 的图像没有加载,我找不到问题或设置图像。

非常感谢!!

在Player.js中:

// doenst work at all with game.load... on top
//game.load.spritesheet('playersheet', 'resources/data/foo.png', 64, 64);
Player = function(game, x, y){
    game.load.spritesheet('playersheet', 'resources/data/foo.png', 64, 64);


    Phaser.Sprite.call(this, game, x, y, 'playersheet');
this.anAttribute = 'whatever'; this.anotherAttribute = 20;};
Player.prototype = Object.create(Phaser.Sprite.prototype);
Player.prototype.constructor = Player;

投掷:

Phaser.Loader - script[Player]: error loading asset from URL resources/js/Player.js

Phaser.Cache.getImage: Key "playersheet" not found in Cache.

主要内容:

处于预加载状态

game.load.script('Player', 'resources/js/Player.js');

正在创建

testPlayer = new Player(game,77,77);

预加载资产的常用方法是在 Phaser.Statepreload() 方法中调用加载程序(就像您对 Player.js 所做的那样)。在执行所有加载调用并获取所有需要的资源后,状态管理器只会移动过去 preload()。是的,如果您有很多不想一次加载的资产,这可能会很不方便,但另一种方法是检查自己是否加载了 spritesheet,这可能会在创建 Player(而且似乎没有办法检查单个资产,只能检查整个队列)。

如果你还想手动加载它,这是一种方法(尚未测试):

game.load.spritesheet('playersheet', 'resources/data/foo.png', 64, 64);
game.load.start();
game.load.onLoadComplete.add(function() {
  // do the rest of the stuff here
}, this);

...但是如果你需要另一个回调,这样它就会变得混乱,而且只有在播放器 spritesheet 是此时唯一要加载的东西时它才有效。

至于找不到 Player.js 的原因,您需要提供相对于 main.js 的路径,因此如果它们在同一目录中,只需提供文件名即可。