我正在使用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);
答案 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
的路径,所以如果他们在同一个目录中,那么只需要使用文件名