我在用箭头移动数字时遇到问题,如您所见,我想制作一个多人游戏应用程序,以便 2 个用户可以在画布上移动数字。我不知道为什么我的号码不动。keydown 和 keyup 功能有问题。但我找不到问题
// 服务器.js ´
var express = require('express');
var app = express();
var server = app.listen(3000);
app.use(express.static('public'));
console.log("server started!");
var socket = require('socket.io');
var io = socket(server);
io.sockets.on('connection', newConnection);
// Skapar en lista för alla som är connectade till servern
var SOCKET_LIST = {};
var PLAYER_LIST = {};
var Player = function(id){
var self = {
x:250,
y:250,
id:id,
number:"" + Math.floor(10 * Math.random()),
pressingRight:false,
pressingLeft:false,
pressingUp:false,
pressingDown:false,
maxSpd:10,
}
self.updatePosition = function(){
if(self.pressingRight)
self.x += self.maxSpd;
if(self.pressingLeft)
self.x += self.maxSpd;
if(self.pressingUp)
self.y += self.maxSpd;
if(self.pressingDown)
self.y += self.maxSpd;
}
return self;
}
// Skapar functionen så att man kan connecta till hemsidan via sockets
function newConnection(socket){
socket.id = Math.random();
SOCKET_LIST[socket.id] = socket;
var player = Player(socket.id);
PLAYER_LIST[socket.id] = player;
socket.on('disconnect', function(){
delete SOCKET_LIST[socket.id];
delete PLAYER_LIST[socket.id];
});
socket.on('keyPress', function(data){
if(data.inputId === 'left')
player.pressingLeft = data.state;
else if (data.inputId === 'right')
player.pressingRight = data.state;
else if (data.inputId === 'up')
player.pressingUp = data.state;
else if (data.inputId === 'down')
player.pressingDown = data.state;
});
console.log('Socket:' + socket.id + ' connected');
}
// Skapar en loop som
setInterval(function(){
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);
'
index.html(客户端) ´
<html>
<head>
<title>monsta</title>
<script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>
<style>
</style>
</head>
<body>
<canvas id="ctx" width="500" height="500" style="border: 1px solid black"> </canvas>
<script type="text/javascript">
var ctx = document.getElementById("ctx").getContext("2d");
ctx.font = '30px';
var socket;
socket = io.connect("http://192.168.1.73:3000");
socket.on('newPositions', function(data){
ctx.clearRect(0,0,500,500);
for (var i = 0 ; i < data.length; i++)
ctx.fillText(data[i].number,data[i].x,data[i].y);
});
document.addEventListener("keydown", function(event){
if(event.keyCode === 68) {
socket.emit('keyPress', {inputId:'right', state:true});
}
else if(event.keyCode === 83){
socket.emit('keyPress', {inputId:'down', state:true});
}
else if(event.keyCode === 65){
socket.emit('keyPress', {inputId:'left', state:true});
}
else if(event.keyCode === 87){
socket.emit('keyPress', {inputId:'up', state:true});
}
});
document.addEventListener("keyup",function(event){
if(event.keyCode === 68){
socket.emit('keyPress', {inputId:'right', state:false});
}
else if(event.keyCode === 83){
socket.emit('keyPress', {inputId:'down', state:false});
}
else if(event.keyCode === 65){
socket.emit('keyPress', {inputId:'left', state:false});
}
else if(event.keyCode === 87){
socket.emit('keyPress', {inputId:'up', state:false});
}
});
</script>
</body>
</html>
'