我正在计划一个用Java编写的基于物理的竞争性多人游戏。它将涉及大量碰撞检测和流体模拟,出于服务器负载的原因,我想在客户端进行此操作。每个玩家都可以控制一辆车辆,可以与其他车辆完全独立地进行模拟。
在我的情况下,Multiplayer billiards game physics simulation(模拟服务器端!)中可接受的答案是完全不切实际的。仅模拟几辆车就会消耗中型PC的许多资源。
我正在考虑让客户端模拟自己的车辆,服务器将其结果广播给其他客户端并协调碰撞。通过使用服务器的备用CPU进行偶尔的物理审核,可以在某种程度上防止作弊。客户将不知道何时对其进行审核,因为无论如何它们都会发送所需的状态。
你会怎么做?这个项目只是为了好玩,所以如果人们作弊,我不会损失任何东西。
最佳答案
在您提到的条件下,您可以采取的减少服务器负载的措施是让每个客户端模拟自己的车辆,以及一个或多个随机的车辆,这些车辆每隔一段时间随机变化。
这样可以减少审核所需的服务器资源数量,从而使审核更加频繁。如果您发现不同玩家报告的数字存在差异,您的服务器可以检查谁在作弊(被审计方或审计方)。如果您由两个或多个其他玩家计算每个玩家的变量,并随机选择它们并以足够频繁的间隔进行更改,则可以减少玩家组队作弊的可能性。
如果要在Java(JVM)环境下对服务器进行编码,则Akka是一个可以帮助您大量分配计算的库。