我是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函数。
答案 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);
...