Javascript 即使在本应重置为0后,变量仍会不断增加
我正在使用socket.io和node.js制作一个多人html5游戏,有一个变量我想保持在某个数字以下,但即使我重置了它,它也会不断增加。我有两个主要文件,app.js:my server和Index.html:client 这是我的密码: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) {
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);