Articles of 多人游戏

在多人游戏中是否应该要求回应?

我不知道是否服务器响应客户端操作请求应该绑定一些操作ID? 绑定时将是: 1.客户端应用程序向服务器发送请求,例如购买项目X,并将操作ID设置为ID。 2.服务器响应操作ID和真或假。 这意味着使用该id的操作是否成功。 未解决的例子: 1.客户端应用程序向服务器发送请求以例如购买项目X. 2.服务器只响应一个项目X的更新数据,在那里提到新的项目所有者。 通过这种方式,客户端可以检查所有者名称是否与自己的名称相同,如果是,则假定该项目已成功购买。 同样的回复数据可以发送给其他客户,让他们知道项目X是被某人购买的。 哪种方法更好? 恕我直言解开是更好,更简单的实施,但感觉就像可以有这么多的边缘情况,我现在没有看到。

处理基于实时音乐/节奏的游戏的延迟

假设我正在制作一个合作的多人音乐节奏游戏 – 两个玩家并肩移动他们的光标/头像,用鼠标左右移动,并尝试击中或躲避正在向他们走来的障碍物。 这里的问题是,如果连接有延迟,比如说B方向200毫秒,那么当玩家A接收到玩家B的移动时,已经太晚了 – 玩家在轨道上的位置将会提前当它被发送的时候。 在两个玩家互相等待以确认他们各自的input的同时,还有一个问题,就是音乐必须在两个玩家的客户端上毫不拖延地继续播放,否则会听起来非常波动,播放器动作可能与节奏不一致,这不是我们想要的。 我们如何处理这个延迟?

如何在P2P上下文中将变化传达给基于2D瓦片的世界状态?

假设一个游戏中的两个玩家想要在一个空白的基于瓦片的游戏世界中同时在对等连接的环境中建立一个城市。 当玩家点击一个图块时,它改变该图块的状态(或图块ID),该图块被保存到文本文件中以供渲染器以后读取。 例如,在下面的图像中,玩家已经将一些拼贴从“空”(1)修改为“道路”(2): 我应该采用什么方法将这些更改传送给连接的对等客户端?

Unity3D多人联网

我正在使用Unity3D制作多人游戏 ,类似于SecondLife(但专注于特定的游戏任务)。 用户将能够直接在游戏中注册/login,并且会产生他们的角色。 到目前为止,我已经做了后端Rest-ful API来管理用户。 我能够使用login和注册从统一本身(使用REST调用例如www.myDomain.com/api/login ),但我怎么产生相应的字符? 此外,目前我正在制作一个基于令牌的APIauthentication系统(很像Facebook,Twitter),因为API本身是无状态的。 我应该在玩家偏好中存储令牌吗? 我已经通过这个教程,但似乎并没有解决我的问题。 任何一种方向都会有所帮助。 谢谢。

在Android多人游戏中唤醒锁

我将一个FPS游戏移植到Android上,而且我有一个关于使用唤醒锁的问题。 当客户端连接到服务器时,客户端是否应该获得一个唤醒locking,以便在播放器为AFK且设备处于睡眠模式时以适当的速率运行帧? 如果游戏正在运行监听或专用服务器,应该使用唤醒锁吗?

服务器到客户端的更新率

我正在构建一个使用客户端 – 服务器体系结构的游戏,并且有关于服务器到客户端更新的以下问题。 目前,服务器每秒执行60个刻度,并且在每一步之后都会向所连接的客户端发送更新,这意味着有关世界上每个实体的信息。 由于我的游戏比较慢,基于rts,所以很多实体在每一步之后都不会改变状态,也不需要更新。 所以为了减less服务器负载,我添加了更新队列。 只有需要更新的实体才会被添加到该队列中,并在每个步骤之后执行。 看这个方法,我想知道是否有任何重大的缺点。 我能想到的一点是,随着时间的stream逝,游戏变得越来越复杂,无论如何,每一步都需要更新所有的实体,这可能只是浪费时间来实现。

什么是一些很less提到的networking模型/策略?

最近我一直在思考多人游戏和networking游戏,而且我发现了大量的信息,但是我觉得可能会有一些标准的模式或者networking策略,我从来没有见过。 有明显的客户端 – 服务器模型,使用客户端作为发送击键并接收关于其他实体的位置信息的terminal。 我相信有一种点对点的模式 – 两个客户端如何在没有专用服务器的情况下玩游戏(在局域网中看到很多)。 有一个客户端预测策略,允许客户端控制播放器,同时等待延迟时间来为服务器返回服务器的实际位置 – 保持按键logging,以使修正看起来顺畅。 在服务器超负荷的情况下,我已经看到了一种战略,把一些像AI这样的工作奉献给客户。 我已经在DayZ mod中看到过…客户在接近时会控制一些僵尸。 有没有明显的或很less见到的战略或模型,上面列出的简要说明中的错误,或者对这个主题的深层部分有额外的解读?

创建球员排名?

我最近创建了一个即将引入玩家排名的比赛系统。 基本上,在选手完成比赛后,他们根据他们在比赛中的performance获得排名。 所以赢得比赛的人得分最高,排名第一,而第二名则排在第二,排名第二,等等。 然而,排在新的排名之后,他们可以挑战其他成员,并有机会扮演其他成员并改变他们的等级。 所以基本上(使用排名系统),如果排名第二的玩家A击败排名第一的玩家B,玩家A现在将成为第一。 我还决定,如果一个球员想在排名中竞争,但在比赛中不存在,他们可以在比赛之后注册,并且将以最低的分数给予最低等级(但是他们有机会提升)。 所以现在,我想知道我应该怎样计划这个计划。 当我把球员从锦标赛转换到比赛排名时,我必须用积分来识别他们。 我决定我可以做这2种方式: 1 1000 2 900 3 800 4 700 5 600 6 500 7 400 8 300 9 200 10 100 或者我可以设置一个指数型的系统,在排名较高的玩家之间的点数会更大。 在互联网上看了之后,我决定用ELO在玩家相互匹配之后给玩家提供新的等级是明智的。我在这个页面上去了解它: http : //www.lifewithalacrity.com/ 2006/01 / ranking_systems.html 所以如果我以这种方式去做这件事,并且让我说我有排名第一的排名#10。 我的公式是: R' = R + K * (S – E) 而#10只有100分,其中#1有1000分。 所以在做math排名#10的#1的预期值是: 1 / [ 1 + […]

与java服务器逻辑代码重复的HTML 5多人游戏?

我想用java服务器做一个浏览器多人游戏。 我仍然在devise阶段,我正在决定使用什么技术。 但是当客户端需要与服务器相同的逻辑来预测运行和事件,然后收到服务器的响应之前,我偶然发现了这个问题。 而我不想要一个代码重复的JavaScript和Java。 那么我有什么select?

Phaser游戏在焦点丢失时崩溃

切换标签后,我不断收到此错误 Uncaught TypeError:无法在box2d.b2ContactFactory.Create(box2d-plugin-full.min.js:9)在box2d.b2Fixture.GetType(box2d-plugin-full.min.js:9)处读取属性'GetType' box2d.b2ContactManager.AddPair(box2d-plugin-full.min.js:9)在box2d.b2BroadPhase.UpdatePairs(box2d-plugin-full.min.js:9)在box2d.b2ContactManager.FindNewContacts(box2d-plugin-full。在c.Physics的Phaser.Physics.Box2D.update(box2d-plugin-full.min.js:13)处的box2d.b2World.Step(box2d-plugin-full.min.js:11)在c.Game.update(phaser.min.js:sourcemap:3)处的c.Game.updateLogic(phaser.min.js:sourcemap:3)处更新(phaser.min.js:sourcemap:3) 只有在世界上有一个以上的球员的时候才会发生,我相信这是因为移动或杀死了数据包而发生的,但是我没有看到任何错误。 case 4: // Position var id = msg.getUint32(2, true); var angle = msg.getFloat32(14, true); if (client.entities[id]){ client.entities[id].body.x = msg.getFloat32(6, true); client.entities[id].body.y = msg.getFloat32(10, true); if (angle != 255){ client.entities[id].body.angle = angle; } console.log("up pos"); } break; case 6: // Kill var id = msg.getUint32(2, true); if (id == 0){ $.each(client.entities, […]