Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 即使在本应重置为0后,变量仍会不断增加_Javascript_Variables_Limit - Fatal编程技术网

Javascript 即使在本应重置为0后,变量仍会不断增加

Javascript 即使在本应重置为0后,变量仍会不断增加,javascript,variables,limit,Javascript,Variables,Limit,我正在使用socket.io和node.js制作一个多人html5游戏,有一个变量我想保持在某个数字以下,但即使我重置了它,它也会不断增加。我有两个主要文件,app.js:my server和Index.html:client 这是我的密码: reset_sx = function() { if (sx > 96) { console.log(sx); sx = 0; } } socket.on("newPositions", function(data) {

我正在使用socket.io和node.js制作一个多人html5游戏,有一个变量我想保持在某个数字以下,但即使我重置了它,它也会不断增加。我有两个主要文件,app.js:my server和Index.html:client

这是我的密码:

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>

预期结果:sx超过96后,将重置为0

实际结果:当sx超过96后,它会变为128,然后变为160
(sx增加32)然后重置为0

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


我是一名noob程序员,因此如果我做了任何愚蠢的事情,请帮助我。如果没有服务器端代码,很难确定这一点,但“newPositions”可能不会立即发出。您可以将reset_sx放在onkeydown函数中(在if块之后)


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

我想我们需要看到更多的代码。我猜这和别的事情有关。它是如何递增的?对不起,我不擅长编码,也不太会使用堆栈溢出。请设身处地为问题的读者着想。您的问题中没有代码,您在哪里调用
reset\u sx
,因此我们如何知道您在做什么以及哪里出错?编辑后。。。
newPositions
何时发出?这取决于……你所说的“if块”是指在每个if语句之后吗?@OmRay是的,那么你不必为每个其他语句调用它啊,我明白你的意思了。
  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);