在多人在线游戏中。如何保持变量全局?我们正在开发一个在线游戏,我们需要一个全局变量。将有一个服务器和多个客户端。我们可以保持一个公共变量,它是所有客户端同步的静态和可编辑的。我们能有一些建议吗?
答案 0 :(得分:4)
如果您移动到群集,拥有基于堆的变量将成为一个问题,因为它不够全局(每个节点将有一个单独的副本)。
如果这不是问题,并且如果通过“变量”表示像String或Long这样的简单事物,那么最好的选择是使用java.util.concurrent.Atomic*
类。例如,
public static final AtomicLong id = new AtomicLong();
这一点最重要的优点是它可以使用比较和交换以及get-and-set进行原子更新,例如id.getAndIncrement();
答案 1 :(得分:0)
服务器必须控制变量。
当客户想要修改该变量时,他们不会更改它,他们必须向服务器发送一条消息,告诉新的所需值。服务器存储它并向所有客户端广播消息,然后它们都用新值更新该变量。
当然,如果服务器自行修改,它只会广播新值。
答案 2 :(得分:0)
- public static final
用于在Java中创建变量Global。
- 但是必须使用volatile
,以便操作直接发生在内存中并直接从内存中读取。
- 最好使用java.util.concurrent.Atomic
中的类。
- 您可以使用AtomicInteger
,AtomicLong
,AtomicReference
等等。