我正在写一部FPS XNA游戏。这将是多人游戏,所以我想出了以下内容:
XNA.Framework.Game
课程让客户在窗口(或全屏)中运行游戏,使用GameComponent
/ DrawableGameComponent
类来存储游戏对象并更新和放大;在每一帧上画出它们。接下来,我想得到问题的答案:
我应该在服务器端做什么?我有几个选择:
Game
类,它将处理所有游戏逻辑(仅限没有图形)。我没有使用标准Game
类的原因是当我调用Game.Run()
时出现白色窗口,我无法弄清楚如何摆脱它。Game
类,它已经有GameComponent
集合和更新事件(每秒60次,正是我需要的)。更新:
我有更多问题:
首先,我应该使用什么套接字模式? TCP还是UDP?如何让客户知道此数据包是否应该处理后?
其次,如果我要对在服务器上存储和处理的游戏对象使用exacly GameComponent
类,如何将他们改为在客户端上画?继承它们(当它们组合成一个程序集时)?还有别的吗?
答案 0 :(得分:1)
首先,你的游戏逻辑应该在服务器上。这不仅可以防止作弊,还可以保证一致性,尤其是随机操作。客户端应该只将其输入发送到服务器
我建议您保持服务器的窗口可见,使其成为调试控制台,您需要它,以了解您的服务器正在做什么。
对于FPS,建议使用UDP。您将发送大量数据,并不关心您的数据包是否全部收到或订购。虽然数据包无法保证到达订购,但您并不必担心它。大多数时候,他们无论如何都会按顺序到达。假设您每秒向您的客户发送60帧,并且您的一个数据包以错误的顺序到达:您的客户端将有1/60秒的错误信息,几乎看不到。
最后,您应该每秒多次向您的客户发送游戏状态的序列化表示。他们应该能够检索该信息并以与服务器相同的方式绘制它。您甚至可以序列化您的游戏组件并在您认为合适的情况下发送它。这取决于你决定。
希望这有帮助!