2017-02-21 65 views
0

我正在使用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 - 腳本[播放]:從URL資源/ JS錯誤裝載資產/ Player.js

Phaser.Cache .getImage:Cache中找不到的關鍵「playersheet」。

主:

預緊力

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

在創建

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

回答

0

預緊資產通常使用的方法是通過調用一個Phaser.State(只是preload()方法內部裝載機就像你用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的路徑,所以如果它們在同一個目錄下,只需要文件名。

+0

非常感謝,這真的幫助,真的很感謝 –