我對Javascript和Typescript都是新手。我用Javascript編寫了一個簡單的Phaser遊戲,現在想用Typescript ES2015(ES6)重新編寫它。
我已經擴展Phaser.Game類,以便通過它的構造函數傳遞一個變量。這用於創建websocket。這個套接字可以作爲Game或State類型的一個屬性存在(我在示例中顯示了這一點)。
我已經擴展Phaser.State類以包含需要通過websocket的.onmessage成員函數由websocket數據設置的屬性。如何使用Phaser正確使用Typescript擴展類
爲了完整性,我已經展示了createWebsocket作爲函數,實際上它是其中一個類的成員函數。
function createWebsocket(wsPath, callback){
var ws = new WebSocket(wxPath);
ws.onmessage = callback;
return ws;
}
export class Game extends Phaser.Game {
csocket: WebSocket;
constructor(wsPath, container) {
this.state.add('Boot', Boot, false);
this.csocket = createWebsocket(wsPath, this.handleMsg);
}
export class Boot extends Phaser.State {
csocket: WebSocket;
constructor(){super();}
my_value: number;
setMyValue(value) {this.my_value = value};
this.csocket = createWebsocket(wsPath, this.handleMsg);
}
我該如何將數據從擴展的Game類實例傳遞到Boot實例或訪問Boot實例的createWebsocket成員函數?
如果我在遊戲中使用以下內容;
state = this.state.getCurrentState();
state.setValue()
我得到了(反)編譯器錯誤,如getCurrentState()返回基類的實例並不即使擴展類的類型傳遞給state.add功能
我的擴展類看到沒有辦法將wsPath傳遞給Boot類的構造函數,因爲類型被傳遞給.add函數。