HTML5游戏开发进阶 12:多人对战游戏操作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/QFire/article/details/79325435

    使用同步网络模式实现真正的多人对战游戏操作框架。我们将研究如何处理网络游戏中一些典型的难题,比如,传输延迟和同步性。为了保证游戏的同步,我们将使用前几章设计的sendCommand()方法来保证玩家的命令在两个浏览器上都已执行。我们将在游戏中使用第10章的触发器来判断游戏的获胜或失败。最后,我们将为游戏实现一个聊天系统。

12.1 同步网络模型

     实现多人对战最重要的一个挑战是确保所有的玩家是同步的。这意味着游戏中任何一个变化(比如,玩家命令某个单位进行移动或攻击)都要传递给其他的玩家,使他们也能看到这个变化。

     为了保证两个玩家完全同步,我们将实现所谓的同步网络模型架构。两个玩家将以相同的游戏状态开始。当某个玩家命令单位时,我们将这个命令发送给服务器,而不是立刻执行它。服务器收到后,将同样的命名发送给每个在线的玩家,并指定何时执行该命令,玩家接收到命令后,将在指定的时间执行命令,这样就可以保证游戏是同步的。

     服务器将运行一个自己的计时器,这个计时器每秒步进10次。当玩家向服务器发送命令时,服务器将记录接收到命令的时间。接着,服务器将命令发送给玩家,并指定执行该命令的时刻。玩家接收到命令后,需要延迟到正确的时刻才执行命令。

     需要记住的是,因为服务器需要确保所有的玩家同时执行命令,所以它要等到所有的玩家都接收到该命令后,才允许计时器进行下一次步进。这就是我们为什么称这个架构是同步的。

     事实上,网络传输时间会造成交流上的延迟,因此,这个过程远比上面描述的复杂。有时候,消息从服务器传到客户端需要花费数百毫秒的时间。我们的网络模型需要考虑对传输时间进行测量,以确保游戏进行流畅。

     在每个玩家第一次连接到服务器时,为其测量网络传输时间。

     测量网络传输时间:传输时间,即消息从服务器传送到客户端所用的时间。我们将在服务器和客户端间往返传递数次消息,然后计算传递一次消息所用时间的均值。

     当浏览器收到来自服务器的latency_ping消息时,就立刻向服务器回复一条latency_pong消息。

     发送命令:当玩家将下达给单位的命令发送给服务器时,我们就将这条命令转发给所有的玩家,并指定在tickLag时间之后,执行该命令。

12.2 结束多人对战

     有两种结束方式。第一种是,一个玩家以关卡指定的方式击败了另一个玩家,另一种就是一个玩家关闭了浏览器或断开了与服务器的连接。

12.3 实现玩家聊天

    定义一个input元素作为聊天输入框

      


阅读更多

没有更多推荐了,返回首页