簡體   English   中英

加載函數中的phaser js未定義變量

[英]phaser js undefined variable within loading function

我剛開始使用Phaser JS進行游戲開發,但是遇到了一個奇怪的問題,我需要一些幫助。

讓我展示我的代碼並解釋哪里出了問題:

 class SimpleGame { game: Phaser.Game; csvTM: string; constructor (csvTM: string) { this.csvTM = csvTM; this.game = new Phaser.Game(800, 600, Phaser.AUTO, 'content', { preload: this.preload, create: this.create }); } test() { console.log("map test: " + this.csvTM); } preload() { console.log("map preload: " + this.csvTM); this.game.load.image('logo', 'empty_room.png'); this.game.load.tilemap("ItsTheMap", this.csvTM, null, Phaser.Tilemap.CSV); this.game.load.image("Tiles", "concrete.png"); } create() { console.log("map create: " + this.csvTM); var map = this.game.add.tilemap('ItsTheMap', 32, 32); map.addTilesetImage("Tiles"); var layer = map.createLayer(0); layer.resizeWorld(); } } 

現在,我在這里要做的只是將一個csv文件路徑傳遞給SimpleGame對象的構造函數。 當僅使用絕對路徑時,一切工作正常,並且我能夠看到網格等。當我嘗試使用變量時,問題就來了。 注意,我有三個日志語句,所有語句均顯示csvTM變量的內容。 現在我要做的是首先:

 var game = new SimpleGame(msg["Commands"][0][1]); game.test(); 

它將加載新的相位器對象,並將文件路徑傳遞到構造函數中。 現在,我100%確保在執行上面的game.test()時看到文件路徑時,已設置局部變量csvTM。 但是,在預加載和創建中,csvTM始終是不確定的..因此破壞了我的代碼。 我確實注意到,同樣在構造函數中創建的游戲對象似乎可以正常工作並且始終處於定義狀態。

有誰知道為什么我的局部變量字符串僅在預加載和創建時未定義,而游戲局部變量似乎已定義?

謝謝你的幫助!

由於我無法訪問您的所有代碼,因此我很難確定這一點。 但我認為這可能是經典javascript“此”問題的一種情況。

嘗試將方法定義為:

preload = () =>  { ... }
create = () =>  { ... }

這將確保函數中的“ this”實際上是“ this”的正確“版本”。

關於stackoverflow上的typescript / javascript中“ this”的工作方式,存在很多問題(和答案),但是我對先前類似問題的回答可能解釋了為什么您會得到這種行為: Visual Studio在TypeScript中顯示 “ this”的值錯誤

編輯:

正如Marwane KA在他對我的回答的評論中指出的那樣,可以通過替換來解決問題

{ preload: this.preload, create: this.create }

以“ this”開頭。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM