簡體   English   中英

如何在Phaser中正確使用Typescript擴展類

[英]How to correctly use Typescript extended classes with Phaser

我是Javascript和Typescript的新手。 我已經用Javascript編寫了一個簡單的Phaser游戲,現在想在Typescript ES2015(ES6)中重新編寫它。
我擴展了Phaser.Game類,以便通過其構造函數傳遞變量。 這用於創建WebSocket。 此套接字可以作為Game或State類型的屬性存在(在示例中顯示)。
我擴展了Phaser.State類,使其包含需要通過websocket的.onmessage成員函數由websocket數據設置的屬性。

我已經將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()

我收到一個(trans)編譯器錯誤,因為即使擴展類類型被傳遞給state.getCurrentState()返回基類的實例而不是擴展類的實例。

我看不到將wsPath傳遞給Boot類的構造函數的方法,因為類型已傳遞給.add函數。

簡單的答案永遠是最好的答案。 所以,回答我自己的問題……

盡管示例中並未明確顯示這一點,但是this.state.add調用不僅允許類,還允許類實例。 只需使用new。

export class Game extends Phaser.Game {
    csocket: WebSocket;
    constructor(wsPath, container) {
        var bootState = new Boot(wsPath);
        this.state.add('Boot', bootState, false);
...

暫無
暫無

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

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