Tag: 游戏循环

使用Node.JS,MongoDB和Socket.IO的实时多人游戏:游戏循环和asynchronous调用

我目前正在使用Node.JS,MongoDB和Socket.IO构buildHTML5游戏。 这个项目的目的不是真的创造一个完整的,完全可玩的游戏,而是理解和实现多人游戏编程的一些基本概念,并习惯于MongoDB。 这是我所使用的基本服务器架构。 服务器通过Socket.IO监听客户端,每次接收到消息时,都会将其推送到队列中。 每当玩家想要移动时都会收到消息,或者以某种方式有效地改变游戏。 我留的很模糊,因为向你详细说明这个游戏是什么并不重要。 所以服务器接收来自所有客户端的消息并将其保存在内存中一段时间​​。 每隔50ms,服务器按顺序处理队列中的所有消息,并使游戏状态前进,向客户端广播更改,然后清空队列并开始再次监听客户端。 我在构build这个游戏循环时遇到了一些困难,因为我不确定MongoDB是什么,如果它及时做到,所有的调用都是纯asynchronous的。 让我们说下面的代码是在我的游戏循环,这是我的顾虑: for (var i=0; i<queue.length; i++) { if(queue[i].message.type === "move") { //The server has first to ensure that the player can effectively move, //thus making a query to MongoDB. Once the result has been retrieved, //the server makes an update in MongoDB with the new player […]

什么是检查游戏状态和发送套接字连接客户端的正确方法?

我正在构build一个社交多人实时游戏,我正在考虑采用什么架构来跟踪状态游戏,并向连接的玩家发送正确的游戏套接字。 我的比赛有四个状态round start , check players , matching state ,全部round result 。 这些状态有10 sec超时时间,并且有空间,而房间有玩家。 我的状态如下所示: var stateDoc = { type: 'round start', uid: uid, timeout: 10000 }; 我的问题是我应该如何存储状态和更新这些?

Node.js:替代setInterval,这对于游戏循环来说更加精确

我的设置是一个多人游戏,带有asynchronous传输数据的套接字。 现在,由于游戏的性质,我有一个游戏循环,应该每500毫秒进行更新(例如位置,外观…)。 var self = this; this.gameLoop = setInterval(function() { for (var i = 0; i < playerSize; i++) { self.players.get(i).update(); }; }, 500); 我目前正在使用setInterval但是当我做了大约200个连接的基准testing时, setInterval漂移到了1000ms,而不是500ms,这使得整个游戏显得很迟钝。 不幸的是,less量的玩家也不够准确。 (注意更新电话最多只需要100ms左右) 所以在研究之后,似乎没有别的办法可以产生一个只处理时间机制的过程呢? 还是有其他的select? 任何人都曾经这样做过,或者可以就如何做到这一点提供一些基本的想法/解决scheme? 完整代码: Game.prototype.start = function() { var average = 0; var cycles = 10; var prev = Date.now(); this.thread = setInterval(function() { console.log("interval time="+(Date.now() – […]