setInterval运行超过预期的时间?

时间:2020-07-28 21:07:56

标签: javascript node.js socket.io setinterval mousemove

我有一个使用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循环都会额外运行。

我不知道会导致什么。键盘输入效果很好。我将不胜感激任何建议。

0 个答案:

没有答案