变量即使在应该重置为 0 之后仍会继续增加

variable keeps increasing even after it was supposed to be reset to 0

我正在使用 socket.io 和 node.js 制作多人 html5 游戏,并且有一个变量我想保持在一定数量以下,但它甚至不断增加在我重置它之后。我有两个主要文件,app.js:我的服务器,Index.html:客户端

这是我的代码:

reset_sx = function() {
  if (sx > 96) {
    console.log(sx);
    sx = 0;
  }
}

  socket.on("newPositions", function(data) {
    ctx.clearRect(0, 0, 500, 500);
    for (var i = 0; i < data.length; i++)
      ctx.drawImage(img.player, sx, sy, 32, 48, data[i].x, data[i].y, 32, 48);
      reset_sx();
  });



  document.onkeydown = function(event) {
    if (event.keyCode === 68) {
      socket.emit("keyPress", { inputId: "right", state: true });
      sx += 32;
      sy = 96;
    }
    //d
    else if (event.keyCode === 83) {
      socket.emit("keyPress", { inputId: "down", state: true });
      sx += 32;
      sy = 0;
    }
    //s
    else if (event.keyCode === 65) {
      socket.emit("keyPress", { inputId: "left", state: true });
      sx += 32;
      sy = 48;
    }
    //a
    else if (event.keyCode === 87) {
      socket.emit("keyPress", { inputId: "up", state: true });
      sx += 32;
      sy = 144;
    }
    // w
  };
  document.onkeyup = function(event) {
    if (event.keyCode === 68) {
      socket.emit("keyPress", { inputId: "right", state: false });
      sx = 0;
    }
    //d
    else if (event.keyCode === 83) {
      socket.emit("keyPress", { inputId: "down", state: false });
      sx = 0;
    }
    //s
    else if (event.keyCode === 65) {
      socket.emit("keyPress", { inputId: "left", state: false });
      sx = 0;
    }
    //a
    else if (event.keyCode === 87) {
      socket.emit("keyPress", { inputId: "up", state: false });
      sx = 0;
    }
    // w
  };
</script>

"newPositions" 在单独的 app.js 文件中发出:

  var pack = [];
  for (var i in PLAYER_LIST) {
    var player = PLAYER_LIST[i];
    player.updatePosition();
    pack.push({
      x: player.x,
      y: player.y,
      number: player.number
    });
  }
  for (var i in SOCKET_LIST) {
    var socket = SOCKET_LIST[i];
    socket.emit("newPositions", pack);
  }
}, 1000 / 25);

预期结果:sx大于96后会重置为0。

实际结果:sx 超过 96 后升至 128,然后升至 160
(sx 递增 32)然后重置为 0

如果我需要添加更多请告诉我。

我是一个菜鸟程序员所以如果我做了任何愚蠢的事情,请帮助

如果没有您的服务器端代码,很难确定,但 'newPositions' 可能不会立即发出。您可以将 reset_sx 放在您的 onkeydown 函数中(在 if 块之后)。

编辑:在 app.js 文件中 - 这似乎只是函数的一部分,我们需要能够看到它的其余部分。