【问题标题】:How to setup game to be multiplayer? [closed]如何将游戏设置为多人游戏? [关闭]
【发布时间】:2016-05-09 15:30:45
【问题描述】:

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

【问题讨论】:

  • 一般来说,您不会将屏幕的实际状态发送到另一个屏幕。引擎存在于两者上,因此所有更新等都在那里处理。您应该在设备之间发送的唯一内容是坐标(如果它们已更改)以及诸如分数之类的可变数据......
  • @durbnpoisn 但是,例如,如果玩家在不同的时间开始玩并加入同一个游戏,那么两个设备上的太阳位置不会不同吗?与我正在进行的所有其他动态一样?
  • 也许吧。但是你为什么要告诉其他玩家呢?只有一名玩家在他们的屏幕上看到什么才重要。这就是为什么本地视图仍然是本地视图。

标签: java android libgdx box2d


【解决方案1】:

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

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

但无论如何,最好在论坛上问这样的问题,因为网络是一个非常广泛的话题。因此,这很可能无法完全回答您的问题。因此,除非您有更具体的问题要问,否则请创建一个关于它的新问题。

【讨论】:

    【解决方案2】:

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

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

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

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

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

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

    另外,是否会在我的代码中使用一堆 if 语句来查看当前游戏是否为多人游戏,如果是,则执行此操作,否则执行此操作?或者我会有单独的课程,单人游戏1个,多人游戏另一个?提前致谢!

    我发现我不应该像 Java 教科书(我在 10 年前学习的)最初建议的那样过于积极地接受面向对象编程(为“所有东西”创建类)。

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

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


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

    【讨论】:

      猜你喜欢
      • 2019-05-28
      • 2019-08-05
      • 2023-03-04
      • 2011-08-06
      • 1970-01-01
      • 2011-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多