实时移动JavaScript
Move in real time JavaScript
我正在写一个实时游戏,我不知道如何实时移动(就像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/
相关文章:
- Javascript移动站点重定向问题
- javascript移动交叉浏览器确定用户是否滚动到页面底部
- Javascript移动重定向问题
- 尝试使用键盘javascript移动画布
- Javascript - 移动滑动滚动
- 什么'这段用javascript移动css元素的代码错了
- 使用Javascript移动到同一页面中的另一帧
- 如何使用javascript移动图像
- Edge动画:如何将javascript移动到html中
- 将javascript移动到单独的文件中,ajax调用会出现错误
- HTML Javascript移动重定向
- 使用JavaScript移动页面上的按钮
- 我们如何在javascript移动应用程序中记录骨干历史堆栈列表
- 如何将内联 javascript 移动到脚本标记
- 使用 javascript 移动或存储文本
- Javascript:移动浏览器的“视点”
- 使用 Raphael JavaScript 移动多个元素
- JavaScript 移动延迟和多次击键
- 将 JavaScript 移动到 ASPX 页面的底部以减少 PageLoad
- 使用具有正确光标定位的 Javascript 移动元素