Articles of 多人游戏

在多人Socket.io游戏中pipe理套接字

我正在用Node.js和Socket.io构build一个大型的多人游戏。 所有的玩家都会在相同的无限地图上移动(想想Minecraft)。 随着玩家的移动,我加载了他们可见的瓷砖。 当玩家移动他们的动作时,应该发送给所有可以看到他们的玩家。 我的问题是 我应该如何去构build我的套接字? 对于所有玩家来说,只有一个sockets看起来不像是可以缩放的。 我可以把世界分成块,但我不知道如何pipe理块的边界。 由于大多数玩家大多数时间都无法看到彼此,所以我更希望每个玩家的套接字只能得到与他们相关的更新。 我读过,Socket.io有一个“房间”的概念,它只是sockets,得到相同的消息。 为每个连接的玩家设置一个单独的房间是否可行? 然后,每次玩家移动,我都可以发送消息给那个房间。 当观众离开或join房间时,我怎么能pipe理呢? 显然这是一个模糊的问题,但我只是寻找最佳实践的build议。 链接到这个问题的文章将不胜感激。

使用Nodejs和Socket IO的多玩家游戏

我正在尝试使用Node和Socket IO的多人赛车游戏,expression。 所以我试过简单的例子来看看节点服务器和客户端之间的延迟。 我在客户端有一个可拖动的图像。 当我移动图像引擎代码heren一个客户端,它必须在所有的客户端。 所以基本上当我移动的图像我发送的图像位置的节点服务器的JSON格式,然后从那里我广播给所有客户端。 有一个约300毫秒的时间延迟。 以下是结果。 客户端1发送数据到服务器:286136(时间戳)服务器收到:286271 客户端2收到的数据位于:286470客户端3收到的数据位于:286479客户端4收到的数据位于:286487客户端5收到的数据位于:286520 从客户端1到客户端5之间的延迟时间为384毫秒。 它太高的赛车游戏..这里是我的服务器代码。 var app = require('express').createServer(); var io = require('socket.io'); var http = require('http'); var http_server = http.createServer(); var server = http.createServer(app); server.listen(3000); var socket = io.listen(server,{ log: false }); socket.sockets.on('connection', function (client) { client.on('message', function (data){ console.log("data arrived to server",new Date().getTime()); // Below both […]

多人游戏是否总是从每个客户请求的数据库中请求数据?

那么我不知道这个问题的标题是否合适,但我不知道如何把这个几句话。 我目前正在使用服务器端的NodeJS和Socket.io以及客户端的HTML5开发多人2D游戏。 这个游戏不需要保存玩家的进度,除非他们完成。 而且我必须确保关于球员的所有信息,比如得分和帮助总是有效的。 所以我决定把这个信息集中在服务器上,这样客户端就不会把分数发送给服务器,而是根据发送的信息计算服务器的分数并发送给所有客户端。 除此之外,我可以有不同的运行这个游戏的最低两名球员和最多4名球员运行。 起初,我决定实现这一点,服务器总是维护内存中的游戏会话数据,但现在我问自己,如果我不应该使用数据库来存储这些数据。 我正在使用数据库存储会话数据只有当他们完成,因为我没有使用未完成的会话数据。 但是,我应该在游戏中保持会话和玩家的数据吗? 我的问题在于,客户端与服务器的通信非常频繁,我必须先从数据库请求数据,进行必要的更改,将其存储回数据库,然后对每个客户端请求重复此过程。 也许这个答案很明显,但是我应该用这个方法吗? 这是我第一次开发游戏,所以我不知道事情是如何工作的。 我只知道我希望服务器速度很快。 我select维护内存中的所有内容,主要是因为所有关于多人游戏开发的例子和教程都没有提到数据库。 谢谢!

使用node.js / socket.io构build一个实时的大型多人游戏有多昂贵?

您好,我正在尝试使用node.js和socket.io构build一个实时多人游戏。 现在,在编码方面实现本身并不是什么大问题,但是来自传统的http请求响应web编程模型,我不知道在stream量和服务器负载方面会有多昂贵。 基本上在游戏期间,玩家的浏览器应当跟踪实时的鼠标input事件,并且将其广播给同一游戏中的所有其他玩家。 下面是一个例子,假设我的头像围绕我的鼠标指针在屏幕上显示,并且应该实时播放给屏幕上的其他玩家。 我会做这样的事情: // client side $(document).on("mousemove", function(event){ io.emit("coordinate", {x: event.pageX, y: event.pageY}); }); 并在服务器上: // server side io.sockets.on("connection", function(socket){ … socket.on("coordinate", function(coordinate){ socket.get("username", function(err, username){ socket.broadcast.emit("move", {username: username, coordinate:coordinate}); }); }); … }); 我认为这应该起作用,但是这需要浏览器每秒向服务器发送几个事件,随后应该向同一游戏中的其余玩家广播它们,并且我担心这个事情的含义。 有一件事是,每个传输的数据片段的大小不是那么大(基本上只是一个x和y坐标)。 如果这太贵,不pipe这个游戏多么伟大,我都不认为我能发货。 谁能开导我吗? 谢谢。 [编辑]澄清,我不问如何使这个架构更有效率。 我只想知道这种types的系统在系统负载(和维护成本)方面是否足够现实对于普通的Web服务,我可以通过查看页面视图数字来估计成本,但websocket是一个全新的领域,我不知道的,所以我想问。

关于更新我的node.js游戏的问题

我正在做一个小游戏,为服务器使用node.js,为客户端使用embedded在HTML5canvas中的.js文件。 玩家可以用箭头键移动。 现在我已经提出了两种更新游戏的方法,一种是每次改变玩家的新位置。 它的工作,但我的服务器必须处理大约每秒60对(客户端的更新速度是30 /秒,有2名球员不停地移动)。 第二种方法是在改变方向速度时只发送玩家对象的新位置和速度/方向,所以基本上在其他客户端上使用来自上次更新的方向/速度对玩家的移动进行插值。 我的服务器只需要处理很less的x / y7speed / direction数据包,但是当数据包到达时,我的客户端经历了一些延迟,因为插入的位置通常与数据包中写入的实际位置相距一点点。 现在我的问题是:你会推荐哪种方法? 而我应该如何为两种方法做出滞后赔偿?