Я делаю многопользовательскую игру на html5 с использованием socket.io и node.js, у меня есть два основных файла: app.js: сервер, Index.html: Client. У меня есть анимация ходьбы, для начала которой требуется некоторое время. Я попытался уменьшить и увеличить частоту кадров анимации в setInterval и даже отредактировать само изображение, но ничего не помогло.
Вот мой код:
index.html:
id="ctx"
width="1920"
height="1080"
style="border:1px solid #000000;"
></canvas>
<script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>
<script>
var img = {};
img.player = new Image();
img.player.src = "/client/img/sprite_01_male.png";
var sx = 0;
var sy = 0;
var ctx = document.getElementById("ctx").getContext("2d");
ctx.font = "30px Arial";
var socket = io();
reset_sx = function() {
if (sx > 96) {
console.log(sx);
sx = 0;
}
}
socket.on("newPositions", function(data) {
ctx.clearRect(0, 0, 1920, 1080);
for (var i = 0; i < data.length; i++)
ctx.drawImage(img.player, sx, sy, 32, 48, data[i].x, data[i].y, 32, 48);
});
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
reset_sx();
};
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>
app.js:
<canvas
id="ctx"
width="1920"
height="1080"
style="border:1px solid #000000;"
></canvas>
<script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>
<script>
var img = {};
img.player = new Image();
img.player.src = "/client/img/sprite_01_male.png";
var sx = 0;
var sy = 0;
var ctx = document.getElementById("ctx").getContext("2d");
ctx.font = "30px Arial";
var socket = io();
reset_sx = function() {
if (sx > 96) {
console.log(sx);
sx = 0;
}
}
socket.on("newPositions", function(data) {
ctx.clearRect(0, 0, 1920, 1080);
for (var i = 0; i < data.length; i++)
ctx.drawImage(img.player, sx, sy, 32, 48, data[i].x, data[i].y, 32, 48);
});
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
reset_sx();
};
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>