我正在使用node& socketi IO创建一个简单的多人游戏。当新客户端加入时,我创建一个新的HTML元素,其ID为每个客户端socket.id。
客户端是移动设备,当它们移动时,我发送'deviceorientation'值,希望让每个客户端控制一个HTML元素。我正在做一些错误的事情,我无法弄清楚,因为所有发生的事情是所有客户都争夺对最新HTML元素的控制权,而不是用自己的套接字ID控制HTML元素。
在服务器上:
servio.on('connection', function (socket) {
servio.sockets.emit('newplayer',socket.id);
socket.on('move', function(data) {
socket.broadcast.emit('clientmove', data);
console.log(data.myid);
});
});
在客户端:
iosocket.on('newplayer', function(data) {
myid = data;
$('body').append('<div class="dot _jsDot" id="'+myid+'"></div>');
});
window.addEventListener("deviceorientation", handleOrientation, true);
function handleOrientation(event) {
var absolute = event.absolute;
var alpha = event.alpha;
var beta = event.beta;
var gamma = event.gamma;
vals = {
betaVal : beta,
gammaVal : gamma,
myid : myid
}
iosocket.emit('move', vals);
}
iosocket.on('clientmove', function(data) {
var x = Math.round(data.gammaVal)*3;
var y = Math.round(data.betaVal)*3;
$('#'+data.myid+'').css({'left':x + $(window).outerWidth()/2});
$('#'+data.myid+'').css({'top':y + $(window).outerHeight()/2});
});
我希望我忽视一些小而不是一些根本的混乱。如果有人对node&amp; socket io可以提供一些建议,这很棒。
答案 0 :(得分:0)
您正在将每个人的myid
更新为新玩家的ID。我建议你区分两者。
执行以下操作:
everyone.push(socket.id); // global array of all player ids
socket.emit('init',[socket.id,everyone]);
servio.sockets.emit('newplayer',socket.id);
客户端上的执行以下操作:
socket.on('newplayer', function(data) {
myid = data.id;
create_div_with(data.id);
create_everyone_else(data.everyone);
});
socket.on('newplayer', function(id) {
create_div_with(id);
});