【问题标题】:Game Multiplayer多人游戏
【发布时间】:2015-03-28 05:38:51
【问题描述】:

我正在尝试创建一个多人游戏,

  1. 每2名玩家,服务器将创建1个房间(我的游戏是PvP,一对一)
  2. 每个房间都处理游戏逻辑
  3. 我将使用Java.Util.Timer 作为我的游戏循环
  4. 服务器 FPS = 5
  5. 每个房间都会处理玩家的移动和小物理

关于实际问题:

根据以下几点,我应该使用哪种游戏循环?下面每种游戏循环的优缺点是什么。

  1. 每个房间都有自己的游戏循环(计时器)
  2. 在一个游戏循环中处理所有房间(计时器)
  3. 在单个游戏循环中处理所有房间,但当房间总数 = 50 时,服务器将创建另一个新游戏循环。

编辑

到目前为止我尝试了什么:

我在第 1 点中使用了游戏循环,但有些房间没有机会更新他们的游戏循环。我很困惑是否需要更改游戏循环,或者是否需要更改每个循环中的代码,或者问题是因为Java.Util.Timer

【问题讨论】:

  • 到目前为止你尝试过什么吗??
  • 我认为这个问题可能更适合 GameDev SE:gamedev.stackexchange.com
  • 我很确定他们仍然可以处理编程。事实上,帮助文章声称:game-specific programming issues (engine architecture, game-related APIs, networking, tools, etc) 是允许的。你为什么不试着把它放在那里,我想你会得到更好的答案。
  • 您列出的所有方法都是有效的,最佳答案取决于您的要求和网络代码。这对我来说似乎太宽泛了。在实施特定方法时遇到错误是另一个问题。
  • @user3598272 真正的答案是“如果您对自己的要求不够了解,无法自己找出答案,请选择最容易实现的那个,因为您有更大的问题要解决担心。然后在需要时更改它。”

标签: java multiplayer


【解决方案1】:

最终,这取决于您,您需要提供更多信息。

你正在处理不同的游戏,或者在不同的房间进行“比赛”,我认为,因为你说你的游戏是 1v1。

如果您不需要在各个“房间”运行时在它们之间传输数据,那么单独的循环是没有意义的。如果您在服务器上托管游戏,则每个“房间”应作为不同的进程并行处理。

还要注意,如果根本不需要传输数据,那么您应该使用直接 TCP/UDP 连接。

如果您详细说明,我将能够更好地回答,但我建议您看看这个。它是 C++ 而不是 Java,但它仍然可能有所帮助

Verifying sent packets on real time network using SFML

【讨论】:

  • 哦,哈哈。那是我的问题! :)
  • 我在 bigcodeszzer 上还有其他适用于 java 的。
【解决方案2】:

我正在考虑自己做这件事。这将取决于您如何对网络进行编码。我正在使用 kryonet 库,所以我的解决方案可能与您的不同。

此外,如果没有更多信息,很难回答这个问题。你在制作什么类型的游戏?图形重吗?您需要 UDP/TCP 连接吗?延迟是一个问题吗?你要实现线程吗?用户是与服务器交互还是直接相互连接或两者兼而有之? (你提到了房间,所以我假设有一个服务器。

根据有限的信息,我一般会推荐这样的东西。

服务器/主机循环---生成-----> Room1 循环
..................................................... --> Room2 循环
................................... ---- -> Room3 循环

我很确定每个循环都需要 fps,并且它们必须干净地划分到主机循环中,您需要尝试一下。还请查看您的网络库以进行 fps 处理。

如果你不使用网络库,我建议你使用一个。

我自己对网络循环有一些不同的想法,最好的办法是让服务器促进两个用户之间的 TCP 连接,然后在他们匹配完成后将结果传输回服务器。

我想来回发送结果会有安全问题,但有一些方法可以解决这个问题。

祝你好运。

【讨论】:

    猜你喜欢
    • 2019-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-28
    • 2015-10-20
    相关资源
    最近更新 更多