Javascript 如何正确使用带有Phaser的Typescript扩展类
我对Javascript和Typescript都是新手。我已经用Javascript编写了一个简单的Phaser游戏,现在想用Typescript ES2015(ES6)重新编写它。Javascript 如何正确使用带有Phaser的Typescript扩展类,javascript,typescript,ecmascript-6,phaser-framework,Javascript,Typescript,Ecmascript 6,Phaser Framework,我对Javascript和Typescript都是新手。我已经用Javascript编写了一个简单的Phaser游戏,现在想用Typescript ES2015(ES6)重新编写它。 我已经扩展了Phaser.Game类,这样就可以通过它的构造函数传递一个变量。这用于创建websocket。此套接字可以作为游戏或状态类型的属性存在(我在示例中展示了这一点)。 我已经扩展了Phaser.State类,以包括需要由websocket数据通过websocket的.onmessage成员函数设置的属性
我已经扩展了Phaser.Game类,这样就可以通过它的构造函数传递一个变量。这用于创建websocket。此套接字可以作为游戏或状态类型的属性存在(我在示例中展示了这一点)。
我已经扩展了Phaser.State类,以包括需要由websocket数据通过websocket的.onmessage成员函数设置的属性 为了完整起见,我将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);
}
如何将数据从扩展游戏类实例传递到启动实例,或访问启动实例的createWebsocket成员函数
如果我在游戏中使用以下内容
state = this.state.getCurrentState();
state.setValue()
当getCurrentState()返回基类而不是扩展类的实例时,我得到一个(trans)编译器错误,即使扩展类类型被传递给state.add函数我认为没有办法将wsPath传递给引导类的构造函数,因为类型被传递给了.add函数。简单的答案总是最好的答案。所以,回答我自己的问题 虽然示例没有清楚地说明这一点,但是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);
...