2017-03-15 25 views
0

JavaScriptとTypescriptの両方が初めてです。私はJavascriptで簡単なPhaserゲームを書いて、Typescript ES2015(ES6)に書き直したいと思っています。
Phaser.Gameクラスを拡張して、コンストラクタを介して変数を渡すようにしました。これはWebSocketの作成に使用されます。このソケットはGameまたはState型のプロパティとして存在する可能性があります(この例ではこれを示しています)。
Phaser.Stateクラスを拡張して、websocketの.onmessageメンバー関数を使用してwebsocketデータによって設定する必要があるプロパティを追加しました。PhaserでTypescript拡張クラスを正しく使用する方法

私はcreateWebsocketを完全性のための関数として示しましたが、実際にはクラスの1つのメンバ関数です。

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() 

IはgetCurrentStateとして(トランス)コンパイラエラーを(取得)は拡張クラスタイプがstate.add関数に渡されていても、基本クラスではない拡張クラスのインスタンスを返し

I型が.add関数に渡されるときに、wsPathをBootクラスのコンストラクタに渡す方法はありません。

答えて

0

単純な答えが常に最適です。だから私自身の質問に答える......

例では明らかにこれを示していませんが、this.state.add呼び出しはクラスを許可するだけでなく、クラスインスタンスも許可します。ただ新しいものを使用してください。

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