移相器模块模式和精灵

时间:2017-02-21 15:55:52

标签: javascript phaser-framework

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

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

非常感谢!!

在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]:从URL资源加载资产时出错/ js / Player.js

  

Phaser.Cache.getImage:在缓存中找不到关键的“playerheet”。

主:

预载

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

in create

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

1 个答案:

答案 0 :(得分:0)

预加载资产的常用方法是在preload()的{​​{1}}方法中调用加载程序(就像使用Phaser.State一样)。执行所有加载调用并获取所有需要的资源后,状态管理器将仅移过Player.js。是的,如果你有很多你不想一次加载的资产可能不方便,但另一种方法是检查你自己是否加载了spritesheet,这可能会导致创建preload()(加上似乎没有办法检查单个资产,只检查整个队列)。

如果你仍然想手动加载它,那就是一种方法(没有经过测试):

Player

...但是这样一来,如果你需要另外一个回调就变得很乱,而且只有当玩家spritesheet是唯一要加载的时候它才会起作用。

至于为什么它找不到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); ,你需要提供相对于Player.js的路径,所以如果他们在同一个目录中,那么只需要使用文件名