游戏多人在线游戏

4
我正在尝试创建一个多人游戏,其中:
  1. 对于每两个玩家,服务器将创建1个房间(我的游戏是PvP,一对一)
  2. 每个房间处理游戏逻辑
  3. 我将使用 Java.Util.Timer 作为我的游戏循环
  4. 服务器FPS = 5
  5. 每个房间将处理玩家移动和一些物理效果
现在进入实际问题: 基于以下几点,我应该使用什么类型的游戏循环?下面每种游戏循环的优缺点是什么?
  1. 每个房间都有自己的游戏循环(计时器)
  2. 所有房间都在单个游戏循环(计时器)中处理
  3. 所有房间都在单个游戏循环(计时器)中处理,但当总房间数=50时,服务器将创建另一个新的游戏循环。
编辑: 我到目前为止尝试过:
我使用了第1种情况的游戏循环(计时器),但是有些房间没有机会更新他们的游戏循环。我不确定是否需要更改我的游戏循环或者是否需要更改每个循环中的代码,或者问题是由于 Java.Util.Timer 导致的。

你尝试过什么了吗? - Anjula Ranasinghe
1
我认为这个问题可能更适合于GameDev SE:http://gamedev.stackexchange.com/ - DonyorM
1
我相信他们仍然可以处理编程。实际上,帮助文章声称允许处理“特定于游戏的编程问题(引擎架构、游戏相关API、网络、工具等)”。你为什么不试着把它放在那边呢?我认为你会得到更好的答案。 - DonyorM
3
你列举的所有方法都是有效的,最佳答案取决于你的需求和网络代码。这对我来说似乎太笼统了。当实施特定方法时出现错误是另一个问题。 - Vitruvie
2
@user3598272,真正的答案是:“如果你不了解足够的要求,无法自己找出答案,那么选择看起来最容易实现的一个,因为你有更大的问题需要担心。然后在需要时再改变它。” - Vitruvie
显示剩余8条评论
2个回答

0

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

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

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

还要注意,如果根本不需要传输数据,则应该真正使用直接的TCP / UDP连接。

如果您详细说明,我将能够更好地回答,但我建议查看此链接。它是用C ++而不是Java编写的,但仍然可能有所帮助

使用SFML验证实时网络上发送的数据包


哦,哈哈。那是我的问题! :) - bigcodeszzer
我在bigcodeszzer上有其他适用于Java的代码。 - bigcodeszzer

0

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

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

根据有限的信息,我通常会建议像这样的东西。

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

我非常确定每个循环都需要fps,并且它们必须干净地分成主机循环,您需要尝试一下。还要查看您的网络库以获取fps处理。

如果您没有使用网络库,我建议您使用一个。

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

我想在来回发送结果时可能会存在安全问题,但有方法可以解决。

祝好运。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接