2013-06-29 4 views
0

Я был автором игры с использованием Socket.io, и у меня проблема, когда сервер создает новый img (новый символ), я могу видеть его только на одном компьютере. Я хочу в этом случае для каждого подключенного компьютер см одинаковое количество изображений лучше, если вы посмотрите на этой Спасибо за каждую помощьSocket.io игра. Как добавить нового персонажа

SERVER:

var handler = function(req, res) { 
    fs.readFile('./index.html', function (err, data) { 
     if(err) throw err; 
     res.writeHead(200); 
     res.end(data); 
    }); 
} 
var app = require('http').createServer(handler); 
var io = require('socket.io').listen(app); 
var fs = require('fs'); 
var port = 3250; 

app.listen(port); 
var postacie = []; 
var ile=0; 

// socket.io 
io.sockets.on('connection', function (socket) { 
    postacie[ile]=createChar(); 
    ile++; 
    io.sockets.emit("tworz", postacie); 


    socket.on("disconnect", function() 
    { 
     postacie.splice(0, 1); 
     io.sockets.emit("tworz", postacie); 
    }) 

}); 


function createChar() 
{ 
    var postac = { 
     src: "http://img703.imageshack.us/img703/1416/2st.gif", 
     id: "character" 
    } 
    return postac; 
} 

КЛИЕНТ:

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Real tie game</title> 
     <script src="socket.io/socket.io.js"></script> 
     <script type="text/javascript"> 
      window.onload = function() { 

       var socket = io.connect('http://localhost:3250'); 

       socket.on("tworz", function(data) 
       { 
        for (var i=0; i < data.length; i++) { 
        var element = document.createElement('img'); 
        element.src = data[i].src; 
        element.id = data[i].id; 

        var body = document.getElementsByTagName('body') 
        body.appendChild(element); 
        }; 

       }) 

      } 
     </script> 
    </head> 
    <body> 

    </body> 
</html> 

И это выглядит НАСТОЯЩЕГО http://img42.imageshack.us/img42/4793/q10w.jpg

ответ

0

Я реорганизованным ваш код немного. Надеюсь, что это поможет вам двигаться в правильном направлении:

Основная идея заключается в том, чтобы использовать 3 основных сообщений:

  1. присоединиться - когда новый клиент подключается сервер посылают информацию о новичку всех других клиентов;
  2. список - когда новый клиент подключается к серверу, отправьте ему список уже подключенных клиентов;
  3. отпуск - когда кто-то отключил сервер отправки идентификатор отключенного клиента

Сервер:

var handler = function(req, res) { 
    fs.readFile('./index.html', function (err, data) { 
     if(err) throw err; 
     res.writeHead(200); 
     res.end(data); 
    }); 
} 

var app = require('http').createServer(handler); 
var io = require('socket.io').listen(app); 
var fs = require('fs'); 
var port = 3250; 

app.listen(port); 
var postacie = []; 
var idGenerator = 0; 

// socket.io 
io.sockets.on('connection', function (socket) { 
    var pId = idGenerator++; 
    socket.emit("list", postacie); 

    var postac = createChar(pId); 
    postacie.push(postac); 
    io.sockets.emit("join", postac); 

    socket.on("disconnect", function() 
    { 
     var sId = "character" + pId; 
     for (var i = 0,n=postacie.length; i < n; ++i) { 
      var postac = postacie[i]; 
      if (postac.id == sId) { 
       io.sockets.emit("leave", {id:postac.id}); 
       postacie.splice(i, 1); 
       break; 
      } 
     } 
    }); 

}); 


function createChar(id) 
{ 
    var postac = { 
     src: "http://img703.imageshack.us/img703/1416/2st.gif", 
     id: "character" + id 
    }; 
    return postac; 
} 

Клиент:

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Real tie game</title> 
     <script src="/socket.io/socket.io.js"></script> 
     <script type="text/javascript"> 
      window.onload = function() { 

       var socket = io.connect('http://localhost:3250'); 

       socket.on("join", function(data) 
       { 
        var element = document.createElement('img'); 
        element.src = data.src; 
        element.id = data.id; 

        var body = document.getElementsByTagName('body')[0]; 
        body.appendChild(element); 

       }); 
       socket.on("list", function(data) 
       { 
        for (var i=0; i < data.length; i++) { 
         var element = document.createElement('img'); 
         element.src = data[i].src; 
         element.id = data[i].id; 

         var body = document.getElementsByTagName('body')[0]; 
         body.appendChild(element); 
        }; 

       }); 
       socket.on("leave", function(data) 
       { 
        var element = document.getElementById(data.id); 
        if (element) 
         element.parentNode.removeChild(element); 
       }); 

      } 
     </script> 
    </head> 
    <body> 

    </body> 
</html> 
+0

Спасибо человек <3 <3 – user2534045