实时移动JavaScript

Move in real time JavaScript

本文关键字:JavaScript 移动 实时      更新时间:2023-09-26

我正在写一个实时游戏,我不知道如何实时移动(就像mmorpg游戏)

现在我的代码只向窗口添加新字符。。

看,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>

有两种通用方法可以同步客户端和服务器的状态。

所有服务器的第一个应该有一个循环,在那里它将执行游戏对象的所有更新、移动它们、更改状态等。这被称为update,有ups-每秒更新。对于MMO来说,它可以在2-10之间,这取决于你想要多少"接近实时"。

然后,每隔一段时间,不比ups更频繁,但可能更罕见,您需要向客户端发送状态,以及对象的位置。例如,可以每秒进行5次(每200毫秒)。客户端将不得不进行插值或外推,称为dead reckoning

第二种方法是基于事件的,其中服务器将事件发送到客户端,例如object_1024 moved to x,y,然后客户端需要有自己的循环,以便将对象从当前位置移动到新位置。

如果是与游戏开发相关的,最好在这里提问:https://gamedev.stackexchange.com/