java - 在服务器端存储 Java 多人自上而下游戏数据的最佳方式

标签 java multiplayer 2d-games

我和一些 friend 正在用 Java 制作一个自上而下的射击游戏,并希望使其在线,我们已经建立了一个 UDP 套接字连接,该连接工作正常,但我们不确定如何存储从客户端接收到的数据.

目前我们正在使用许多 HashMap 来存储数据,例如我们有三个 HashMap 用于玩家跟踪、游戏信息(玩家数量等)和子弹(子弹位置、谁发射了等)。

但我确信除了 HashMap 之外,还必须有一种更好、更安全的方式来存储这些数据,但不确定是什么。

编辑谢谢- Philipp(抱歉花了这么长时间才提出一个半像样的问题)

我对使用 HashMap 来存储这些数据的担忧是,有相当多的数据需要放入其中,而我们当前使用单行来存储对象的所有数据,例如玩家 HashMap 中的一行将将玩家 ID 作为键,并使用字符串值来存储其他任何内容,例如“hp,xloc,yloc”。然后我们将其分开使用。我似乎不认为这是存储和检索数据的最有效方法。

抱歉,如果这仍然没有意义。

我想我真正的问题是有没有更有效的替代方案,或者 HashMap 是否是最好的方法?

谢谢

最佳答案

正如您自己所发现的,将游戏中每个实体的数据存储在字符串中并不是一个好主意。

每当您需要有关字符串的一些信息时,您都必须解析该字符串,并且字符串解析速度不是很快,并且当有关每个实体的数据变得更加复杂时,很容易变得相当复杂。

更好的方法是使用一组类变量为每个实体类型创建一个类,并使用它来存储有关每个实体的数据:

class Player {
    public: 
         int positionX;
         int positionY;
         int lifes;
         String name;
         //...
}

(顺便说一句:经验丰富的面向对象程序员会将这些变量声明为私有(private)变量,并使用 getter 和 setter 方法来更改它们,但我们现在不要走得太远)

然后,您的 HashMap 将存储此类的实例:

 HashMap<Integer, Player> players;

设置这些很简单:

 Player p = new Player();
 p.positionX = 200;
 p.positionY = 400;
 p.lifes = 3;
 p.name = "Ford Prefect";
 players.put(42, p);

(顺便说一句:经验丰富的 OOP 程序员会使用构造函数)

您可以通过访问 HashMap 来设置和获取每个玩家的变量:

 players.get(42).positionX += 10; // move player 42 10 pixels to the right

关于java - 在服务器端存储 Java 多人自上而下游戏数据的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15557786/

相关文章:

javascript - 贪吃蛇游戏 : how to check if the head collides with its own body

java - 无法签署 Mac OS X 应用程序

java - 工厂创建的对象可以有构造函数吗?

java - 如何从枚举构造函数中抛出异常?

java - Java 游戏开发应使用哪种类型的覆盖?

ios - 无尽的运行游戏使用什么方程式来设置玩家的速度?

java - jboss-as-maven-plugin无法部署到远程Jboss?

node.js - 构建多人服务器的技术

networking - 如何在多人游戏中同步物理?

java - 某些手机​​上的谷歌玩游戏无法登录错误