HTML5游戏开发进阶 12:多人对战游戏操作
2018-02-14 17:07
357 查看
使用同步网络模式实现真正的多人对战游戏操作框架。我们将研究如何处理网络游戏中一些典型的难题,比如,传输延迟和同步性。为了保证游戏的同步,我们将使用前几章设计的sendCommand()方法来保证玩家的命令在两个浏览器上都已执行。我们将在游戏中使用第10章的触发器来判断游戏的获胜或失败。最后,我们将为游戏实现一个聊天系统。
为了保证两个玩家完全同步,我们将实现所谓的同步网络模型架构。两个玩家将以相同的游戏状态开始。当某个玩家命令单位时,我们将这个命令发送给服务器,而不是立刻执行它。服务器收到后,将同样的命名发送给每个在线的玩家,并指定何时执行该命令,玩家接收到命令后,将在指定的时间执行命令,这样就可以保证游戏是同步的。
服务器将运行一个自己的计时器,这个计时器每秒步进10次。当玩家向服务器发送命令时,服务器将记录接收到命令的时间。接着,服务器将命令发送给玩家,并指定执行该命令的时刻。玩家接收到命令后,需要延迟到正确的时刻才执行命令。
需要记住的是,因为服务器需要确保所有的玩家同时执行命令,所以它要等到所有的玩家都接收到该命令后,才允许计时器进行下一次步进。这就是我们为什么称这个架构是同步的。
事实上,网络传输时间会造成交流上的延迟,因此,这个过程远比上面描述的复杂。有时候,消息从服务器传到客户端需要花费数百毫秒的时间。我们的网络模型需要考虑对传输时间进行测量,以确保游戏进行流畅。
在每个玩家第一次连接到服务器时,为其测量网络传输时间。
测量网络传输时间:传输时间,即消息从服务器传送到客户端所用的时间。我们将在服务器和客户端间往返传递数次消息,然后计算传递一次消息所用时间的均值。
当浏览器收到来自服务器的latency_ping消息时,就立刻向服务器回复一条latency_pong消息。
发送命令:当玩家将下达给单位的命令发送给服务器时,我们就将这条命令转发给所有的玩家,并指定在tickLag时间之后,执行该命令。
12.1 同步网络模型
实现多人对战最重要的一个挑战是确保所有的玩家是同步的。这意味着游戏中任何一个变化(比如,玩家命令某个单位进行移动或攻击)都要传递给其他的玩家,使他们也能看到这个变化。为了保证两个玩家完全同步,我们将实现所谓的同步网络模型架构。两个玩家将以相同的游戏状态开始。当某个玩家命令单位时,我们将这个命令发送给服务器,而不是立刻执行它。服务器收到后,将同样的命名发送给每个在线的玩家,并指定何时执行该命令,玩家接收到命令后,将在指定的时间执行命令,这样就可以保证游戏是同步的。
服务器将运行一个自己的计时器,这个计时器每秒步进10次。当玩家向服务器发送命令时,服务器将记录接收到命令的时间。接着,服务器将命令发送给玩家,并指定执行该命令的时刻。玩家接收到命令后,需要延迟到正确的时刻才执行命令。
需要记住的是,因为服务器需要确保所有的玩家同时执行命令,所以它要等到所有的玩家都接收到该命令后,才允许计时器进行下一次步进。这就是我们为什么称这个架构是同步的。
事实上,网络传输时间会造成交流上的延迟,因此,这个过程远比上面描述的复杂。有时候,消息从服务器传到客户端需要花费数百毫秒的时间。我们的网络模型需要考虑对传输时间进行测量,以确保游戏进行流畅。
在每个玩家第一次连接到服务器时,为其测量网络传输时间。
测量网络传输时间:传输时间,即消息从服务器传送到客户端所用的时间。我们将在服务器和客户端间往返传递数次消息,然后计算传递一次消息所用时间的均值。
当浏览器收到来自服务器的latency_ping消息时,就立刻向服务器回复一条latency_pong消息。
发送命令:当玩家将下达给单位的命令发送给服务器时,我们就将这条命令转发给所有的玩家,并指定在tickLag时间之后,执行该命令。
12.2 结束多人对战
有两种结束方式。第一种是,一个玩家以关卡指定的方式击败了另一个玩家,另一种就是一个玩家关闭了浏览器或断开了与服务器的连接。12.3 实现玩家聊天
定义一个input元素作为聊天输入框相关文章推荐
- HTML5游戏开发进阶 11:WebSocket与多人对战模式
- HTML5游戏开发进阶 2 :创建基本的游戏世界
- JAVASCRIPT开发HTML5游戏--斗地主(网络对战PART4)
- HTML5游戏开发进阶 6 :加入单位
- HTML5游戏开发进阶 7 :单位智能移动
- HTML5游戏开发进阶 10:完成单人战役
- HTML5游戏开发进阶 9:添加武器和战斗
- HTML5 Canvas核心技术:图形.动画与游戏开发
- 游戏开发中的数学和物理算法(12):矢量的加减法
- html5游戏开发-愤怒的小鸟-开源讲座(二)-跟随小鸟的镜头
- HTML5 Canvas游戏开发(一)基础知识
- HTML5在移动端开发的12大特性
- HTML5 Canvas游戏开发(二)高级功能
- html5游戏开发的五个最佳实践
- 【HTML5游戏开发小技巧】RPG情景对话中,令文本逐字输出
- html5游戏开发-零基础开发《圣诞老人送礼物》小游戏
- python3开发进阶-Django框架中的ORM的常用(增,删,改,查)操作
- 七巧板平台html5游戏开发之初识物理引擎
- 使用 playn 和 GWT 开发 html5 游戏。搭建环境。helloworld。
- HTML5 2D平台游戏开发#6地图绘制