当我开始游戏服务器的新实例,它设置了插座和听众如下。调用函数(socket.io/node.js)
var GameServer = function() {
this.player = new Player();
var that = this;
// Setup sockets and listeners
var socket = io.listen(8000);
socket.sockets.on('connection', function(client) {
client.on('message', that.onSocketMessage);
client.on('disconnect', that.onSocketDisconnect);
});
}
然后我有两个原型GameServer.prototype.onSocketMessage & onSocketDisconnect。
我有两个问题与当前的代码:
使用=这和关闭?功能。看起来很丑。
当onSocketMessage被调用时,这个想法是它的工作出了什么消息,然后调用内部游戏服务器的另一个功能。只有这是不可能的,因为这属于socket.io系统。请看下图:
...
function onSocketMessage() {
this.player.move();
}
this.player不再为这一点。不再是GameServer的一部分。
如果我的插座设置和消息传递功能,游戏服务器和原型之外处理?
或者我还能怎么解决呢?
干杯
编辑
好了,所以我已经试过这和它的作品,但看起来很丑陋,我认为:
var socket = io.listen(8000);
socket.sockets.on('connection', function(client) {
client.on('message', function (data) {
that.onSocketMessage(this, that, data);
});
client.on('disconnect', function() {
that.onSocketDisconnect(this, that);
});
});
能把它加以改进?
绑定选项完美工作。有趣的是,我已经尝试绑定,但我实施了不正确的,它没有工作。现在我明白了为什么!虽然问题:'client.on('message',this.onSocketMessage.bind(this));'当收到该消息时,通常在onSocketMessage中,你可以使用this.id(这将是客户端/套接字ID)和(数据)传递给你的函数。数据仍然通过,但我不再有任何访问this.id.我怎么会得到这个通过? – 2012-01-06 05:45:12
你不能;这就是为什么'bind'对你的第一个问题真的很有用。对于你的第二个问题,我会努力让'player'以某种方式进入方法。 – 2012-01-06 07:07:08
好的!感谢您的帮助,出色的答案。 :) – 2012-01-06 07:14:20