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

时间:2016-05-09 15:30:45

标签: java android libgdx box2d

我正在为Android开发一款游戏,我想知道多人网络是如何工作的。我不需要具体内容(例如......如何来回发送数据)。我很好奇,例如,在我的游戏中,我在背景中有一个太阳(精灵),我以编程方式在天空中移动。在多人游戏中,我会在两台机器上计算出来吗?或者只是1,然后将太阳位置发送给另一个?另外,在我的代码中是否有一堆if语句来查看当前游戏是否为多人游戏,如果这样做,如果不这样做?或者我会有单独的课程,1个单人游戏,不同的多人游戏?提前致谢!

2 个答案:

答案 0 :(得分:1)

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

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

但无论如何,最好在论坛上问这样的事情,因为网络是一个非常广泛的话题。而这很可能并不能完全回答你的问题。因此,除非你有更具体的东西要求创建一个关于它的新问题。

答案 1 :(得分:1)

我知道这可能过于宽泛,但它似乎是对知识的合理搜索,所以我会回答每一点:

  

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

     

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

我认为太阳不是游戏的重要组成部分(如玩家,恶棍或弹丸),所以为了简单起见,我会按时间计算其位置(一天可能是10分钟而不是24小时),只要用户的时钟正确,它就能正常工作。

减少网络活动是一个好主意。

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

  

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

我发现我不应该过于积极地使用面向对象的编程(为所有内容创建类),就像Java教科书(我在10年前研究过)最初建议的那样。

我认为Minecraft是一个可能的灵感,因为他们有各种实体的课程,以便他们可以有不同的AI,或者被玩家控制 - 但是当你在单人游戏中时,它似乎只是一个多人游戏一个球员。 (如本地主机服务器,但通信包含在软件中并跳过TCP层)

这将有助于为这两种情况保留相同的代码。

我认为Sun问题可能是一个很好的主题问题,但是类和if语句问题有点模糊。有时聊天可以帮助那些,因为你只是想制定你的想法。你将有很多事情需要思考并尝试不同的方式。