变量即使在应该重置为 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 文件中 - 这似乎只是函数的一部分,我们需要能够看到它的其余部分。
我正在使用 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 文件中 - 这似乎只是函数的一部分,我们需要能够看到它的其余部分。