我想开始编写多人3D游戏。它将是一个虚拟世界,用户被表示为玩家。每个玩家,都是3D模型。我将用Java和JOGL编写它,因此它将是跨平台的,可通过Web(applet)访问。服务器将用C ++编写。
当用户用鼠标点击虚拟世界中的某个点时,它将在动画中转到此点。我的问题是,如果客户计算到哪里去,并且每次都向服务器发送他的新职位,那么服务器会更新客户端吗?或者,如果客户端只是将服务器发送到他想去的地方,那么服务器会向这个客户端和所有客户端发送他的新职位吗?考虑到我想要最小的带宽并防止脚本小子。
谢谢。
答案 0 :(得分:4)
我认为流行的设计是在客户端上假设一个动作会成功并继续它,告诉服务器它做了什么,并允许服务器在检测到它做了什么时“纠正”了客户端腥。这使得游戏客户端能够响应玩家的请求,同时仍然赋予服务器否决权。
因为服务器始终是世界状态的权威,并且其他游戏客户端将仅通过服务器接收其信息,所以客户端的任何非法操作将始终被服务器捕获,直到它们可能影响另一个球员。
答案 1 :(得分:0)
如果您不喜欢客户端的作弊,最好通过服务器计算玩家的位置,但是,当服务器处理某人的位置时,您必须执行线程以不落后其他玩家。
答案 2 :(得分:0)
永远不要相信客户方。它受到各种各样的问题的影响,包括故意欺骗和不被注意的腐败。如果您允许客户端指定字符的位置,某些客户端将指定您希望超出该客户端范围的位置,并且某些客户端将生成一个非常不准确的位置,这是不可能通过正常方式摆脱的(除非您有传送到家庭的能力。)
客户端应该告诉服务器角色的去向,服务器应该响应。它必须告诉每个其他相关客户端角色正在做什么,所以它可以轻松地为每个客户端做到这一点。
Runescape是我所知道的唯一按照你建议的方式工作的MMORPG。在Runescape上,如果您遇到连接问题并单击移动,您的角色将保持静止(尽管以较小的方式移动,看起来还活着),直到服务器获得并确认移动。 (你的角色将在没有用户输入的情况下进行战斗,让你有机会在危险的领域中存活不良。)