代码之家  ›  专栏  ›  技术社区  ›  Alon Gubkin

虚拟世界帮助[关闭]

  •  0
  • Alon Gubkin  · 技术社区  · 15 年前

    我想开始写一个多人3D游戏。它将是一个虚拟世界,用户被表示为玩家。每个玩家,都是一个三维模型。我将在Java和JOGL中编写,这样它将是跨平台的,并且可以通过Web(Applet)访问。服务器,将是WRRITIN在C++中。

    当用户用鼠标点击虚拟世界中的某个点时,它将在动画中转到该点。我的问题是,客户是否应该计算到哪里去,并且每次都向服务器发送他的新位置,这样服务器就会更新客户?或者,客户机应该将服务器发送到他想去的地方,然后服务器将把他的新位置发送给这个客户机和所有客户机吗?考虑一下,我需要最小的带宽,并防止脚本小子。

    谢谢您。

    3 回复  |  直到 11 年前
        1
  •  4
  •   Mike Daniels    15 年前

    我相信目前流行的设计是假设客户机上的某个操作会成功并继续执行,告诉服务器它已经做了什么,并允许服务器在发现客户机做了可疑的事情时“纠正”客户机。这使得游戏客户端对玩家的请求做出响应,同时仍然赋予服务器否决权。

    由于服务器始终是世界状态的权威,而其他游戏客户端将只通过服务器接收其信息,因此客户端的任何非法行为都将始终被服务器捕获,然后才可能影响其他玩家。

        2
  •  0
  •   David Thornley    15 年前

    永远不要相信客户。它会受到各种各样的问题的影响,包括蓄意的欺骗和未被注意的腐败。如果你允许客户端指定角色的位置,一些客户端将指定一个你希望超出该客户端边界的位置,而一些客户端将生成一个非常不准确的位置,这是不可能通过正常方式摆脱的(除非你有一个远程传输到主基地的能力)。

    客户端应该告诉服务器角色要去哪里,服务器应该对此做出响应。它已经必须告诉其他相关的客户机角色在做什么,所以它可以同样轻松地为每个客户机做这件事。

    runescape是我所知道的唯一一个mmorpg,它的工作方式和你的建议一样。在runescape中,如果出现连接问题并单击以移动,则角色将保持静止(尽管以较小的方式移动,以保持活动状态),直到服务器获取并确认移动。(你的角色将在没有用户输入的情况下战斗,给你一个在危险区域中通过坏连接生存的机会。)

        3
  •  0
  •   Toribio    15 年前

    如果你不喜欢在客户端作弊,最好是通过服务器来计算玩家的位置,但是,你必须做线程处理,以免服务器在处理某人的位置时落后于其他玩家。