2013-07-05 13 views
0

Я пишу настоящую игру времени и я не имею ни малейшего представления, как сделать шаг в режиме реального времени (например, ММОРПГ игра)Перемещения в режиме реального времени JavaScript

Теперь мои коды только добавить новый символ окно ..

Посмотрите и plis возьмите мне любое дополнение! :(

Сервер (Socket.io):

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

Что значит «сделать шаг» означает в этом контексте? Вы говорите об анимации чего-либо на экране или обновлении связанных данных по сети? (Или оба?) – nnnnnn

ответ

0

Существует два основных подхода к клиент синхронизации с серверами состояния

. Сначала всего сервера должен иметь петлю o n его сторона, где он будет выполнять все обновления игровых объектов, перемещать их, изменять состояния и т. д. Это называется update и есть ups - Обновления в секунду. Для MMO он может находиться между 2-10, исходя из того, сколько вы хотите «близко к реальному времени».

Тогда каждый определенный период, не чаще, чем ups, но может быть более редким, вам нужно отправить состояние клиенту с позициями объектов. Это можно сделать, например, 5 раз в секунду (каждые 200 мс). Клиенту придется интерполировать или экстраполировать его, он называется dead reckoning.

Второй подход будет на основе событий, где сервер будет отправлять события клиенту, например object_1024 moved to x,y, то клиент должен был бы иметь собственный цикл для того, чтобы переместить объект из текущего местоположения на новый.

Если разработка игр, связанные, лучше спросить здесь: https://gamedev.stackexchange.com/

Смежные вопросы