问题标签 [online-game]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1519 浏览

meteor - 我可以使用像slither.io 这样的流星创建在线游戏吗?

我想知道流星的反应性,并且我对像slither.io 这样的在线游戏有一个想法。

我可以创建在线游戏吗,因为流星乐观 UI提供了最简单的方法来更新数据而无需重新加载页面。

有可能吗?


对不起,愚蠢的问题我对 Meteor 比较陌生。

0 投票
1 回答
67 浏览

playframework - 在哪里存储用户特定的在线游戏数据

我正在尝试使用 Play 框架创建在线棋盘游戏。这是我的第一个这样的应用程序。为最终用户提供良好的响应时间很重要。让我们想象一个像垄断这样的游戏,其中多个用户玩游戏,购买不同的地点,在该地点建造房屋或酒店等。用户玩的每一个回合都会有一些特定于该用户的棋盘外观变化。例如,如果棋盘有 40 个位置,当用户 1 购买 location1 时,下一轮棋盘应该以他已购买 location1 的方式看待他。棋盘的视图对于不同的用户来说是不同的,因为他们玩游戏取决于他们所采取的行动类型。

所以问题是当游戏进行时我应该在哪里存储用户特定的数据而不影响每次检索棋盘数据的响应时间?如果是缓存,那么可以为每个用户放入缓存中的可接受数据限制是多少?

谢谢

0 投票
1 回答
57 浏览

bit-manipulation - 需要帮助识别位操作技术

我需要帮助识别以下技术。是一个冗长的阅读所以请尝试跟随。我的问题是,如果这是一个已知的标准,它是否有名字,任何人都可以联系或看到这个。有什么好处。另外,如果您想知道,这与在一个早已被遗忘的在线 PS2 游戏中捕获的数据包有关,我是一个试图将其带回的团队的一员。

请注意,这不是 ip 协议所描述的大小,此大小表示与实际有效负载一起使用,它是供客户端和服务器使用的。以下阅读描述了如何表示消息的大小。~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~

真正的数据包长度是 94 字节长。这些是在所有 ip 协议内容之后的有效负载数据上的字节 5-6 [CF E0]。另外,请注意,我们必须将这两个字节解释为小端格式。因此,我们应该将这两个字节视为

[E0 CF] 我们通过获取第一个字节的第一个半字节(4 位)从这两个字节中确定数据包类别。在这种特殊情况下,这只是 0xE。然后我们会将此数据包识别为具有 0xE 的数据包类别。这被识别为会话发起者数据包类。

现在,从剩余的半字节和第二个字节确定数据包长度。首先我们将第二个字节转换为十进制,我们得到 0xCF = 207。这个值与实际长度的差异是 207-94=113 个字节。最初我知道这个字节与数据包长度成正比,但只是有一些偏移。我不确定这个偏移量是从哪里来的。此外,对于不同的数据包,这个偏移量似乎会发生变化。需要更多的研究。

最终,我发现每个数据包类都有不同的偏移量。所以我只需要检查同一数据包类中的数据包,以找出该数据包类的偏移量。为此,我制作了一个包含所有报告长度(以字节 5 为单位)的表格,并将其与实际数据包长度进行了比较。我发现的是

字节 5 中几乎所有报告的数据包长度都大于 0x80=128。另一个字节中的第二个半字节用作数据包长度的一种乘数,每个数据包类别都有一个相关的最小数据包长度和可以表示的最大数据包长度。对于我正在检查的 0xC 数据包类别,最小数据包大小为 18 字节,最大数据包大小约为 10*128 +17 = 1297 字节。这导致了以下从第五和第六字节数据包头中提取数据包长度的方法。首先请注意,我们之前已确定数据包类别为 0xE,并且与此数据包类别相关的最小数据包大小为 15 个字节。现在,在这种情况下取​​第一个字节 [0xE0] = 0 的第二个半字节并将其乘以 128 个字节 0*128 = 0 个字节。现在将此添加到第二个字节 [0xCF] = 207 在这种情况下并减去 128。所以 0 + 207 - 128 = 79。现在我们需要添加此数据包类别的最小数据包大小 0xE = 15 字节最小数据包大小. 所以 (0*128)+(207-128) -15 = 94。这是报告的真实数据包大小。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~

这个公式在 20,000 个后续数据包上进行了测试,并且有效。但是,为什么要费尽心机只是为了表明随后的消息的大小呢?我认为这是一种加密形式,但消息的其余部分根本没有加密。该公式已被理解,但我没有看到任何好处。我在想这可能是一种通过仅使用一个字节传递大于 255 的数字来优化数据包大小的方法,但这只能节省我一个字节,抛出另一个字节会产生 65,535 的最大值,所以为什么不抛出另一个字节进入字节流。我确信一个额外的字节不会对网络产生很大的影响,那么目的可能是什么。我想也许其他人会看到缺少的东西或与某种记录在案的标准、协议、模式有关的东西,

另外,我不认为上面的公式是由另一个团队成员完成的。

0 投票
0 回答
62 浏览

c# - N 层网络游戏中的实体框架

我正在尝试为在线游戏(教育项目,而不是商业项目)找到一个好的设计模式。

假设我的数据库中有一张玩家表和一张地图表。所以实体框架自动生成了这些模型类:

现在我需要一个“控制器”播放器和地图类,它们将保存状态信息(如地图上的位置):

现在我想向 PlayerController 添加一个 MapController 属性(这将返回玩家所在地图的 MapController)。

我可以通过使用获取 Map 对象,this._player.Map但现在要找到 MapContoller,我必须实现我自己的 MapControllers 列表并搜索该列表。就像是:

这有点丑陋。我想有一个更好的方法来找出它,这已经为我实现了。(就像 Player.Map 一样)此外,它是一个冗余搜索,因为Player.Map已经使用Player.MapID.

任何人都可以为这样的系统想出更好的设计吗?

谢谢你,布格尔。

0 投票
1 回答
50 浏览

c++ - 从服务器排序并分发给客户端或发送未排序并让客户端排序更好?

这是一个在线游戏,我得到报酬来实现一个游戏事件,这是一个玩家对玩家的游戏系统。

在我的设计中,我有一个服务器端类(命名PvpEventManager为事件管理器,它会在玩家杀死另一个玩家、玩家加入或离开事件时进行处理,无论是决定还是断开连接……等等,并且有许多其他功能。

现在,该类还包含一个容器,其中包含事件期间的玩家信息(名为vPlayerInfo),用于各种处理。当玩家杀死别人时,他kill必须增加,受害者也是death如此,很明显。但是,客户端也有一个记分板,并且由于服务器的工作是处理杀死并告诉所有其他连接到该事件的客户端,因此容器将得到更新。

有必要将容器从kill结构成员从升序到降序排序,以便可以正确呈现记分牌(在客户端)。

什么会更好?

  • 在服务器上对容器进行排序,增加服务器的工作量,并将已经排序的准备在屏幕上渲染的容器发送给所有客户端。
  • 发送未排序的容器,并让每个连接的游戏客户端在收到容器时自行对容器进行排序。

请注意,服务器在每个滴答声中都会处理成千上万个传入和传出的数据包,并且确实处理了很多很多其他的东西。

这有点描述了它的设计:

活动设计

此代码描述了在实际代码的一部分上对容器进行排序时所做的事情。

这是 ideone 编译代码的链接:http: //ideone.com/B08y9l

如果您想实时编辑编译,还有一个 Wandbox 链接:http: //melpon.org/wandbox/permlink/6OVLBGEXiux5Vn34

0 投票
1 回答
24 浏览

performance - 在线游戏的活跃连接数

在您周围的世界频繁变化的在线多人游戏中(用户从服务器获取有关此的更新) - 通常会建立多少活跃连接?

例如,可以使用 WebSockets。通过一个连接发送所有数据是一种有效的方法吗?您必须检查每个收到的消息类型:

  • 如果是关于世界的信息 -> 改变你周围的世界;
  • 如果是关于用户个人数据的信息 -> 在您的个人资料中进行更改;
  • 如果是本地聊天消息 -> 将新消息添加到聊天窗口。

..ETC。

我认为如果 .. else if .. else if .. else if ..对于每个传入数据,这会极大地降低客户端性能。从第二个 WS 连接中获取世界变化不是更好吗?这样您就不必每次都检查它的类型。但其他类型并不那么频繁,因此第一个连接可以用于它们。

所以问题是开发人员通常如何处理连接数和消息类型以提高性能?

谢谢

0 投票
1 回答
2496 浏览

unity3d - 使用统一网络创建房间

嗨,首先为我的英语道歉...我新开始使用统一创建多人游戏我从这里下载统一主服务器和促进者并在我自己的服务器上运行它们以创建在线多人回合制游戏。当有人创建房间并且其他玩家加入该房间时,如果创建房间的人离开游戏或dc,其他玩家将被踢出房间。有没有办法处理这个问题?像重新连接?或在服务器中创建空间?

0 投票
1 回答
464 浏览

online-game - 文字游戏的免费单词列表

我正在用英语构建一个文字游戏。是否有我可以下载和使用免费服务的免费单词列表来帮助验证用户输入的单词?

0 投票
2 回答
442 浏览

websocket - websocket游戏中客户端和服务器之间的数据类型

我正在使用 socket.io 玩 websockets。我做了一个聊天室,但我想做一个实时游戏。socket.io 文档说任何数据类型都可以通过 websockets 发送,所以我想知道发送玩家位置、速度和按键信息等数据的最有效数据类型是什么。
换句话说,在 agar.io 之类的游戏中,客户端和服务器之间真正发送的是什么类型的数据?是二进制、json等吗?

0 投票
1 回答
37 浏览

html - 如何测试输入的用户名和密码是否已注册

我正在创建一个需要注册的在线游戏。我正在使用谷歌表单进行注册,并使用谷歌电子表格来存储数据。我也有一个登录表单,但无法测试输入的用户名和密码是否已注册。有没有办法测试它是否匹配谷歌电子表格中的登录名?

登录表单代码: