如何使用Phaser

时间:2017-03-15 16:54:53

标签: javascript typescript ecmascript-6 phaser-framework

我是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)编译器错误,因为getCurrentState()返回基类的实例而不是扩展类,即使扩展类类型被传递给state.add函数

我认为没有办法将wsPath传递给Boot类的构造函数,因为类型被传递给.add函数。

1 个答案:

答案 0 :(得分: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);
...