Вы не устанавливаете позицию, используя переданные данные. В вашем примере это глобальные xp
и yp
.
Вы также не передали user
с данными при вызове emit
, поэтому другие клиенты на самом деле понятия не имеют, какого пользователя следует переместить. Я бы также предложил добавить это в качестве поля в отправляемых вами данных.
socket.emit('move', {
user: //THE VAR WHICH HOLDS THE SESSIONID FOR THIS USER
xp: xp,
yp: yp
});
socket.on('move', function(data) {
$('#user_' + data.user).animate({ left: data.xp + 'px', top: data.yp + 'px' }, 400 );
});
Вам следует обновить данные, отправленные вами через move
.
На стороне сервера должно быть что-то вроде:
socket.on('move', function(socket, data) {
// broadcast to all sockets WHO is moving and WHERE
io.emit('move', {userid: socket.id, xp: data.xp, yp: data.yp});
});
А на стороне клиента что-то вроде:
$('#stage').on('click', function(e) {
$('#my_user').animate({ left: e.pageX + "px", top: e.pageY + "px" });
socket.emit('move', {xp: e.pageX, yp: e.pageY});
});
socket.on('move', function(data) {
// check if it is not your own informations that server send back to you
if (data.userid != my_userid) {
$('#user_' + data.userid).animate({ left: data.xp + "px", top: data.yp + "px" });
}
});