我有一个使用socket.io用node.js编写的应用程序。主事件循环如下所示:
io.on("connect", function(CLIENT) {
//Run this code when a client connects
SERVER.connectPlayer(CLIENT);
//Recieve input from client
SERVER.handleInput(CLIENT);
//Run this code when a client disconnects
CLIENT.on("disconnect", function() {
SERVER.disconnectPlayer(CLIENT);
});
});
function main() {
SERVER.update();
}
setInterval(main, SERVER.tickRate);
这很好,但是我在SERVER.handleInput
上遇到了问题:
//Recieve input from the client
Server.prototype.handleInput = function(client) {
client.on("sendKey", function(data) {
client.player.handleKey(data.key, data.pressed);
});
client.on("sendMouse", function(data) {
client.player.mouse_x = data.x;
client.player.mouse_y = data.y;
});
}
这两种方法都可以正常工作,但是第二种方法client.on("sendMouse")
每当运行时都会触发我的main()
循环。我尝试注释掉sendMouse
的正文,但这没有任何改变。
每当用户移动鼠标时,客户端就会触发此方法。这是我正在使用的代码:
//Handles input on the client and sends it to the server
Game.prototype.bindKeys = function() {
var game = this;
this.input = {};
document.addEventListener("mousemove", function(event) {
game.mouseMove(event);
}, false);
}
Game.prototype.mouseMove = function(event) {
this.setMousePos(event);
client.emit("sendMouse", this.mouse);
}
setMousePos
只是计算出光标的当前位置并进行设置,以便客户端知道要发送回服务器的坐标。如果我在客户端上删除了sendMouse
,则游戏可以正常运行,但否则每次sendMouse
触发时,我的主setInterval循环都会额外运行。
我不知道会导致什么。键盘输入效果很好。我将不胜感激任何建议。