Java 如何将游戏设置为多人游戏?

Java 如何将游戏设置为多人游戏?,java,android,libgdx,box2d,Java,Android,Libgdx,Box2d,我正在为android开发一款游戏,我想知道多人网络将如何工作。我不需要细节(例如,如何来回发送数据)。我很好奇,例如,在我的游戏中,我有一个背景太阳(精灵),我可以通过编程在天空中移动。在多人游戏中,我会在两台机器上计算吗?或者仅1,然后将太阳位置发送给另一个?另外,在我的代码中是否会有一堆if语句来查看当前游戏是否是多人游戏,如果是这样做的话,如果不是这样做的话?或者我会有单独的职业,一个是单人职业,另一个是多人职业?提前谢谢 这是这里要讨论的最广泛的方法。现在的大多数游戏都从客户端抽象出服

我正在为android开发一款游戏,我想知道多人网络将如何工作。我不需要细节(例如,如何来回发送数据)。我很好奇,例如,在我的游戏中,我有一个背景太阳(精灵),我可以通过编程在天空中移动。在多人游戏中,我会在两台机器上计算吗?或者仅1,然后将太阳位置发送给另一个?另外,在我的代码中是否会有一堆if语句来查看当前游戏是否是多人游戏,如果是这样做的话,如果不是这样做的话?或者我会有单独的职业,一个是单人职业,另一个是多人职业?提前谢谢

这是这里要讨论的最广泛的方法。现在的大多数游戏都从客户端抽象出服务器,服务器验证客户端的所有输入并计算逻辑。然后将其发送给服务器上的每个侦听者,客户端使用更新的信息绘制到屏幕上。主要规则是
永远不要信任客户端
,因此您需要询问服务器端的所有输入

查看
KryoNet
如果你想从网络开始,你基本上创建了两个应用程序,一个可以只是一个控制台应用程序,从连接的客户端和客户端本身接收消息。服务器不需要绘制任何东西,但是对正在发生的事情进行反馈是很有用的


但无论如何,最好在论坛上问这样的问题,因为网络是一个非常广泛的话题。这很可能不能完全回答你的问题。因此,除非你有更具体的问题要问,否则就要提出一个新的问题

我知道这可能“过于宽泛”,但这似乎是对知识的合理探索,因此我将回答每一点:

我正在为android开发一款游戏,我想知道多人网络将如何工作。我不需要细节(例如,如何来回发送数据)。我很好奇,例如,在我的游戏中,我有一个背景太阳(精灵),我可以通过编程在天空中移动

在多人游戏中,我会在两台机器上计算吗?或者仅1,然后将太阳位置发送给另一个

我假设太阳不是游戏的重要部分(比如玩家、坏人或投射物),因此为了简单起见,我会按时间计算太阳的位置(一天可能是10分钟而不是24小时),只要用户的时钟正确,太阳的位置就可以正常工作

减少网络活动是个好主意

但是,玩家位置或随机生成的地形(或者更好的只是随机数生成器的种子)必须通过网络传输

另外,在我的代码中是否会有一堆if语句来查看当前游戏是否是多人游戏,如果是这样做的话,如果不是这样做的话?或者我会有单独的职业,一个是单人职业,另一个是多人职业?提前谢谢

我发现我不应该像Java教科书(我10年前学习过)最初建议的那样,过于积极地采用面向对象编程(为“一切”创建类)

我将MiCrP筏视为一种可能的灵感,因为他们为不同的实体提供课程,使他们可以拥有不同的AI,或者是玩家控制的——但是当你在单人游戏中时,它看起来就像一个只有一个玩家的多人游戏。(与本地主机服务器类似,但通信包含在软件中,并跳过TCP层)

这将有助于在两种情况下保持相同的代码



我认为Sun问题可能是一个很好的主题问题,但是类vs if语句的问题有点模糊。有时候,聊天会对你有所帮助,因为你只是想表达你的想法。您将有很多事情要考虑,并尝试不同的方法。

一般来说,您不会将屏幕的实际状态发送到另一个屏幕。引擎存在于两者上,因此所有更新等都在其中处理。你应该在设备之间发送的唯一东西是坐标,如果坐标发生了变化,以及诸如分数之类的可变数据…@durbnpoisn但是,例如,如果玩家在不同的时间开始玩并加入同一个游戏,太阳在两个设备上的位置不是都不同吗?就像我正在进行的所有其他动态一样?也许吧。但是你为什么要告诉另一个玩家呢?这只关系到一个玩家在屏幕上看到什么。这就是为什么地方观点仍然是地方性的。