Questions tagged «multiplayer»

由多个玩家共同或竞争地在本地或远程播放。

1
多人HTML5,Node.js,Socket.IO [关闭]
已关闭。这个问题需要细节或说明。它当前不接受答案。 想改善这个问题吗?添加细节并通过编辑此帖子来澄清问题。 5年前关闭。 我尝试使用HTML5 Canvas,JavaScript(太使用John Resig简单继承库)和带有Socket.IO的Node.js创建简单的多人游戏。我的客户代码: var canvas = document.getElementById('game'); var context = canvas.getContext('2d'); var socket = new io.Socket('127.0.0.1',{port:8080}); var player = null; var UP ='UP', LEFT ='LEFT', DOWN ='DOWN', RIGHT ='正确'; socket.connect(); socket.on('connect',function(){socket.send(); console.log('Connected!'); 玩家=新玩家(50,50); }); socket.on('message',function(msg){ if(msg =='UP'){ player.moveUP(); } else if(msg =='LEFT'){ player.moveLEFT(); } else if(msg =='DOWN'){ …

3
制作实时多人平台游戏涉及什么?
我正在创建一个具有“合作”功能的平台游戏,我想通过网络/互联网来工作。 现在,我已经阅读了有关网络游戏编程的文章,其中包括诸如每个程序员都需要了解的有关游戏网络的文章,因此我了解了Peer-to-Peer锁步和服务器-客户端预测架构等技术之间的区别: 我得出的结论是,对于将要在互联网上玩的任何实时游戏,“对等”锁步根本不是一种选择。 我还担心即使对于平台游戏者,由于服务器往返的作用和反应之间的延迟,简单的客户端-服务器体系结构(没有某种客户端预测)也会导致游戏性能下降。(话虽如此,我想消除对中央服务器的需求,所以只有其中一个参与者,即客户端,实际上会遇到这种延迟)。 这让客户可以预测,但是即使对于像平台游戏这样的简单游戏,这听起来仍然很复杂。 我将如何为多人平台游戏创建有效的客户预测系统?

4
您如何允许在开发的后期阶段编写网络代码?
我目前正处于编写游戏的早期阶段,最终我希望在很多方面进行改进。 我该如何跳过编写网络代码的过程,却又很容易实现,即不必为了添加游戏而重写整个游戏。 我要记住什么? 我有一个组件模式,可以将物理/碰撞检测,游戏逻辑,数据类型和动画/渲染彼此分离。 如何编写没有实现任何网络代码但可以在本地测试的客户端和服务器? 我应该在客户端中做什么,然后在服务器中做什么?我是否应该假装自己已经完成网络代码,并在服务器和客户端之间发送消息并考虑到延迟等原因,即使没有延迟也是如此? 编辑:计划成为自上而下的RPG。我在想一个简单的多人游戏,在这里为朋友托管服务器,所以作弊并不是什么大问题(谁想和作弊的朋友一起玩?)。我仍然想采用“服务器永远是正确的”方法。 编辑2:我想我正在寻找一些关于我的思维定式的指针。我应该如何处理键盘输入,动画等,而不是立即应用所有效果/更改。嗯,毕竟,我可能需要适当地阅读网络知识,这是我希望通过制作某种可以在本地工作的网络框架来摆脱的东西。

2
如何为联网的实时游戏实现游戏状态快照系统?
我想创建一个简单的客户端-服务器实时多人游戏作为我的网络课程的一个项目。 我已经阅读了很多有关实时多人网络模型的文章,并且了解了客户端和服务器之间的关系以及滞后补偿技术。 我想做的事情类似于Quake 3网络模型:基本上,服务器存储了整个游戏状态的快照;在从客户端接收到输入后,服务器将创建一个反映更改的新快照。然后,它计算新快照和最后一个快照之间的差异,并将它们发送给客户端,以便它们可以同步。 在我看来,这种方法确实很可靠-如果客户端和服务器之间具有稳定的连接,则仅发送少量必需的数据以保持它们同步。如果客户端不同步,则也可以请求完整快照。 但是,我找不到实现快照系统的好方法。我发现很难摆脱单人编程架构,并思考如何以以下方式存储游戏状态: 所有数据与逻辑分离 可以计算游戏状态快照之间的差异 通过代码仍然可以轻松操纵游戏实体 快照类如何实现?实体及其数据如何存储?是否每个客户实体都有一个与服务器上的ID匹配的ID? 快照差异如何计算? 总的来说:游戏状态快照系统将如何实现?


3
Node.js的实时多人游戏设计原则
我一直在阅读关于多人网络的Valve 文章,该文章改编自Yahn Bernier在2001年发表的名为“ 客户端/服务器游戏内协议设计和优化中的延迟补偿方法”的论文。我正在使用通过socket.io连接到客户端的node.js服务器制作实时多人游戏,我对以下详述的原理有一些疑问: 实体插值 [插值]通过缓冲服务器更新,然后平滑地插补它们之间的间隔来播放,从而防止通常会引起的抖动。它还可以防止数据包丢失引起的故障。 客户端预测 预测是指客户无需等待服务器确认本地参与者的行为即可对其行为进行预测的概念。当服务器命令到达时,将对实体的预测状态进行测试,直到检测到匹配或不匹配。 滞后补偿 延迟补偿是服务器的一种概念,它在处理[用户输入]时使用播放器的延迟来倒回时间,以便查看播放器在发送命令时看到了什么。与预测相结合,延迟补偿可以帮助将网络延迟降低到从攻击者的角度来看几乎可以消除的水平。 这些原则是否适用于TCP,就像适用于UDP一样,在实现上是否会有任何差异?我可以看到实体插值不需要保护以防止丢包,仅此而已。 我什至可以使用UDP和Node.js在服务器和Web浏览器之间进行通信,反之亦然? 由于该论文已有十多年的历史,这些原理是否仍在使用中?还是出现了其他技术? 任何帮助将非常感激。

3
如何在JavaScript中处理多人游戏?
我只是对用于移动多人游戏的技术进行了一些研究。 目前,这只是一个实验,因此,玩家唯一需要了解的就是其他玩家。 如果这是一个典型的Web应用程序而不是一个游戏它只会一直触发HTTP请求-但是由于这是一个游戏,因此性能和准确性将成为一个问题。 由于该游戏针对多个电话平台,因此可以说客户端将使用JavaScript或基于JavaScript的框架编写。服务器技术是完全开放的。 每个玩家都需要做一个HTTP帖子,并且只能使用更快的协议。基于网络的多人游戏的原因是,跨蓝牙或其他本地网络的多人游戏在平台之间的差异太大,可能会引起问题。 因此,问题归结为可用于JavaScript多人游戏的良好协议/技术是什么?关于服务器端的东西有什么建议吗?有什么理由我应该放弃这种两层体系结构并直接进行电话到电话的连接?

4
实时多人游戏使用哪个数据库(RDBMS,NoSQL和BOTH)?
我正在开发一个实时多人游戏,该游戏将需要一个数据库(用于诸如播放器配置文件,朋友,解锁,新闻等功能)。这是一个标准PC游戏(不是基于浏览器的游戏),将使用客户端服务器建筑。我刚接触数据库,过去几天,我偶然发现了激烈的争论:RDBMS与NoSQL,进行了一些研究。目前,我倾向于NoSQL,但是在阅读了每种用法(RDBMS和NoSQL)之后,我很想同时使用两者。我知道这似乎很奇怪,但让我解释一下我的情况: 我的团队有一个共享的虚拟主机程序包,该程序包提供无限的mySQL存储和带宽,唯一的警告是我们一次只能打开25个连接(共享主机规则)。我打算将其用于我的网站(无疑是一种典型用法),以便发布新闻更新,支持社区功能(例如评论,上传粉丝艺术等)等。一切都很好,但是-!这是事情变得有趣的地方...我想在游戏中显示发布在我的网站上的相同信息。这意味着我的网站和游戏都使用mySQL。除了新闻发布之类的内容外,我还计划在游戏中将其用于聊天和服务器列表之类的事情。我最关心的是25连接规则。 这就引出我问问题1:这是否可行,还有更好的选择吗? 现在,除此之外,我还阅读了有关NoSQL的性能以及适用于实时游戏的信息(我可能是错的,我经历了一场巨大的RDBMS与NoSQL的火焰之战,到达这里并可能被烧死了)。基本上,我想对所有游戏对象数据使用MongoDB。 同样,如果我提供一些背景信息将对您有所帮助:我找到了一个主机(MongoLab),该主机免费提供240MB的MongoDB软件包,我打算在需要升级之前使用它。假设有240MB,我已经计算出能够存储大约60,000个播放器(如果每个播放器大约为4KB,而我们忽略了可能存储的其他内容)。存储空间以及将来必须支付更多费用(我们的游戏应该成功)不是问题。我目前打算对所有游戏对象数据使用MongoDB的唯一原因是由于将访问该游戏对象数据的频率(例如,每当玩家被杀死,拿起物品,开枪等时)也喜欢无格式的直接文档(这使得映射游戏对象数据更加容易)。我应该注意到,一次 我打算在我的网站上使用相同的MongoDB来显示玩家资料信息(我不关心完全的一致性,可以从游戏中进行更新有些延迟)。这使我想到第二个问题,即问题2:这是个好主意还是应该做得更好? 游戏将具有类似于以下的启动体验: 客户端登录(MongoDB) 客户端位于带有聊天室的游戏首页(MySQL) 客户端转到服务器列表(MySQL) 客户端连接到服务器并在其中播放 服务器传达所有播放器的更新(MongoDB) 这就是我想象中的工作方式。这对您来说看起来不错,还是对如何改进此计划有建议?


5
网络层库
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我正在寻找免费的或独立游戏价格合理的任何可添加到我的游戏中的网络层。 网络层是指我可以与之交互的某种库,可以将消息发送到该库或从该库接收消息,并且该库将自行处理所有低层信息。 我特别在寻找: 高质量的库可以理解和处理网络拥塞等复杂问题。 可扩展的库,这将使我有很多玩家一起玩。 最好是对等解决方案,而不是基于服务器的解决方案。 优选地,具有对高级语言(诸如Java或C#)的绑定的库。 我要寻找的示例是Grapple,但是我知道还有其他可用的库。

3
P2P多人游戏与客户端服务器的局限性
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 我正在阅读多人游戏架构。 到目前为止,我发现的大多数文章都是关于客户端-服务器模型的。 我想知道使用p2p架构的局限性是什么?可以使用哪些“类”游戏(或更常见的游戏)来实现?不是吗 总体而言,它与客户端-服务器模型的主要区别和局限性是什么?

2
如何用客户端预测来补偿运动对象?
我正在实现一个支持类似Star Control的近战游戏服务器。因此,您有飞船和射击船,它们具有超简单的速度/加速度/减震物理原理来驱动运动。 我已经阅读了Valve,Gafferon和Gambetta,并实现了Gambetta的算法来进行客户预测: 客户端预测通过在服务器上更新其位置来对玩家船进行工作,然后将服务器尚未处理的输入重新应用于玩家船。 不幸的是,它不适用于我的游戏。我认为这与Gambetta的示例没有考虑已经移动的对象或逐步更新的命令有关。(“步”是指帧)。因此,在我的游戏中,玩家抬起脚来加速(已经移动)的飞船,该飞船在客户端上继续移动,将命令发送到服务器,通常在下一步从服务器接收世界快照。我得到更多类似的东西: 该播放器命令在客户端步骤3运行,但在服务器上仅在服务器步骤5运行。到客户端在客户端步骤6接收到世界快照时,该预测已经完成,尤其是在速度更快的情况下。 问题的症结在于客户端在步骤5运行命令,而服务器在步骤6运行命令。我考虑过可能会使用命令发送客户端步骤,并让服务器回滚并使用客户端时间步骤重新运行命令。但是,这可能会导致许多其他问题-例如自回滚以来收到的命令发生了什么,或者作弊客户端如何通过更改发送的步骤来加以利用。 从Google 读取和观看此类视频时,提到了一种不同的方法,您可以逐步更改播放器的位置,以使其与快照的位置匹配。 我的问题: 您能使Gambetta的算法以恒定的步幅运行吗?还是在概念上与我的游戏不兼容? 那么逐步逐步插值是正确的方法吗?如果是这样,您如何从客户位置插值一个已经移动的对象以匹配刚从服务器接收到的对象? 这些方法,渐进插值法和Gambetta算法可以串联使用,还是互斥?

3
为什么不能存在跨平台的多人游戏?
至少,为什么它们这么难制造?-假设这就是为什么甚至AAA工作室也无法在游戏中实现这一壮举的原因。尤其是对于可以在Xbox,PS4和PC上构建的现代跨平台游戏引擎(如Unreal和Unity)而言,为什么还没有大规模地做到这一点? 例如,《暗黑破坏神III》是在各种平台上发行的游戏。尽管它是暴雪公司(暴雪公司)的产品,暴雪公司是世界上最富有的视频游戏公司之一,但它不允许Xbox播放器与使用PC的人一起玩。

2
如何同步多人游戏中的跳跃等动作?
我是新手游戏开发人员,并且我一直在研究多人游戏。我观察到总会有一些延迟,玩家总是会从过去的动作中获得更新。但是,有诸如航位推测法之类的技术可以处理延迟。我可以预测运动并使运动平稳。但是我将如何使动作同步,例如跳跃,停止行走等。 假设客户A在移动,他以100m / sec的速度在10.2时处于100m并发送了此信息。客户B稍后会收到此信息,设为10.4。因此,在客户端B,我可以使用预测并将客户端A放置在120m处。但是,如果客户在10.3跳到110m,该怎么办?我无法预测,并且由于我一直在使用预测,所以无法显示客户A的过去。 我可能根本不发送跳转动作来解决此问题。但是,如果我的游戏中存在一些空隙,玩家可以跌倒并死亡。因此,如果我不同步跳跃动作,其他玩家将观察到一个玩家在跑步,然后他陷入虚无,然后再次出现在屏幕上,破坏了视觉吸引力。 跳转只是一个例子,可能在许多情况下无法进行预测。因此,如何处理它们。这样的示例之一可以是像Awesomenauts这样的多人在线战斗竞技场游戏。

3
我知道超级简单的多人游戏设置可能不是一个好主意,但是为什么呢?
我正在做一个简单的小MOBA,只是为了好玩。我把所有东西都做成单人游戏,然后我意识到:“糟糕,我应该添加多人游戏,对吧。” 我以前从未进行过联网工作,因此学习如何将Lidgren集成到我的游戏中既有趣又很棒。问题是,据我所知,我几乎知道我做事的方式是错误的,因为据我所知,它不足以使主流游戏使用,但是这又有什么问题呢? 基本上,我正在做的是,只要玩家执行某项操作,它就会向服务器发送一条消息,说“嘿,我刚刚做了这件事”。服务器和客户端都运行相同的模拟。然后,服务器向所有其他客户端发送一条消息,告诉他们该家伙做了那个事情。 在大多数情况下,除了在少数情况下,当玩家做某事时,客户会认为它很酷,并自行进行。因此,当您右键单击某个位置以将其移动到该位置时,该玩家的客户便开始将他的家伙移至该位置,然后向服务器发送一条消息以告知其相关信息。 所以基本上: 玩家1发射一个咒语,使他的移动速度提高100%,持续6秒 玩家1的本地客户将该buff添加到他的Unit对象中 玩家1的客户端向服务器发送一条消息,说“嘿,我刚刚施放了此咒语” 服务器确保他确实有足够的魔法来施放该咒语,如果是,则将该buff添加到该Unit对象的服务器副本中 服务器向所有其他客户端发送一条消息,说“嘿,这个家伙刚刚施了这个咒语” 其他所有客户端都会收到此消息,并“很酷”,然后将该buff添加到该玩家的本地Unit对象中 我一直在浏览一些东西,以了解大型游戏是如何进行多人游戏的,这对于刚开始涉足此游戏的人来说有点令人困惑,但是看起来Source引擎发送了一个包含所有更改的数据包。世界每一刻?再说一遍,对于这些东西来说是全新的,但是您真的可以经常推送那么多数据吗? 抱歉,这有点不合理,但是基本上,我想知道为什么我的简单系统不是正确的方法,因为如果是这样,其他游戏会使用它,对吗?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.