猫史档案馆


【联机教程】论多个客户端是如何愉快地成为好朋友的

用户:I桔汁糖浆II桔汁糖浆I查看:29 回复:52 评论:29 创建时间:2018-07-02T23:15:26


yoooo大家好我是上海,在萌新院是一个打杂的。


几个月前我曾经研发出了一个双人联机排队系统,本想能够创造编程猫的一个新喵,结果感觉好多人都看不懂、不会用的样子……

那么,我就深入浅出地解析一下我的联机模块的原理吧。

国际惯例,先把模块的变量和积木图片发上来(前方图):


在变量图片中,画红框的是模块中较为重要的部分。


而积木所在的角色有四个造型,分别写着“排队中”、“匹配中”、“匹配成功”、“由于您切出了游戏导致您的位置被他人占据。将在四秒后重新排队”这四段字。每个造型分别对应着一种联机状态。其实还有第五种,即“对方离线”,只不过是其他角色和积木所掌管的事情了,本贴只说一种处理方法,即重启游戏。是的,重启游戏emmm


如果你看不请,请右键图片——在新标签页中查看,然后合理使用页面缩放功能。


那么,我们开始分析一坨中每一项每一项的作用吧!


进入队列


各位如果有经常玩我的“精灵Battle”,就可能遇到一个提示:您前面还有xx人。那么要做到这个,首先需要建立一个名为“云排队编码”的云变量和“排队编码”、“排队末尾判定”这两个本地全局变量。当模块被触发时,我们先把“云排队编码”的值赋给“排队编码”,这个就是我们当前的队列序号。然后另“云排队编码”的值+1,这个就是下一个参与排队的人的序号。注意了!这边用到了一个高端操作——“告诉(自己)执行……”。这个操作往往可以把几个模块整合在一块,乃居家旅行之神技也。那么在这个模块中,我们做了一件事情:一直判断“云排队编码”的值是不是之前我们赋予的值,如果不是,就说明喵后面有人进入队列了,我们不是队列的最后一个人,此时设置“排队末尾判定”的值为1。这个变量在之后才会用到,现在我们不管他。


人数判断


在这个地方,我们判断了一次在线人数是否小于等于3,如果是,则让“云排队编码”的值变为0,为第三个人的队列序号做准备,并且跳出的大循环,直接进入匹配状态。要提一点的是,在本模块中,队列中第一个人的序号为0。


游戏结束判断


为什么要做队列?就是为了能让玩家等待游戏结束后直接“新开房间进行游戏”啊!这个时候就免不了我们判断游戏是否结束。在这个部分,我们需要用到计时器。我们首先把计时器清零,然后发布一个公告:当前你前面还有多少人。这个公告贮存在一个名为“排队人数提示”的本地全局变量上,调整好变量的位置,到时候显示即可。公告部分和计时器归零积木可以互相调换位置。

接下来就是本模块的一个关键点。在讲解之前,我们要引入一个概念——“黑房间”。你可以想象一个画面:在一个黑不溜秋的房间里,你看不见任何东西。而你想要知道房间里是否还有人,就只能喊一句“有人就吱一声”,然后等待“吱”的声音。如果真的听见的话,那么当然证明有人了;没有听见的话,有两种情况:一种是这个房间里除了你之外就没人了,另一种是对方的反射弧绕地球七圈,反应比较慢(网络延时),需要一段时间才能作出回应,这时候你要做的就是继续等待。当然,等待也有一个限度,如果超过了限定的时间,就直接认为这个房间里没人了(游戏结束),然后开始下一步行动。在这个部分的重复执行里,我们首先要同时进行两个判断:一个是名为“匹配连接数据”的本地全局变量是否等于名为“云匹配用数据”的变量,另一个是判断计时器的值是否大于3秒。前一个判断中,“云匹配用数据”的值会因为下面的一些积木而不断变化,这个时候我们只要判断是否变化,如果有就说明游戏还在继续。而当计时器大于三秒时,除去网络真的卡得嫑嫑的,就说明游戏结束了。那么,我们就可以跳出这个小循环,进行接下来的步骤。


向前进!


到了这一步,恭喜您,你终于可以跟随着队列前进了。我们首先要把“云匹配用数据”的值设为0,避免与下面的一些模块相冲突。然后我们进入了一个新的循环。进入的第一步就是判断自己的队列序号是否等于0或者“云匹配用数据”是否等于2。如果序号为零,进行判断“云匹配用数据”是否小于2。如果依然成立,恭喜你,进入了匹配状态。在此之前,我要告诉大家在本模块中,“云匹配用数据”的值为0和1时,模块处于匹配状态;2和3时,代表联机成功,游戏开始。而第二个判据就是判断游戏是否开始,如果开始的话,重新回到人数判断游戏结束判断两个阶段。

如果都为否,那么计时器归零,判断一下人数(因为排你前面的人可能退出了游戏,此时的人数小于等于2)和等待计时器的值为3秒。如果小于二人,则跳出循环,与人数判断相辅相成,进入匹配状态。而计时器为3秒时,先判断自己是不是在队列末尾(即“排队末尾判定”的值为0),如果是,则把“云排队编码”的值-1,告诉即将来到喵后面的人队伍变短了,然后更新公告。就这样不停地向前进,当自己的序号为0时,就代表前面没人,进入了匹配状态。


匹配初始化


New Stage!前面我们已经把“云匹配用数据”清零了,这边就不会出现bug了应该。我们首先要判断一下“云匹配用数据”的值,然后在0和1之间做出抉择,把“匹配连接数据”的值设置为不等于“云匹配用数据”的值,然后把“云匹配用数据”的值设置为“匹配连接数据”的值。很绕口对不对?看积木啊!而且这样做,是为了下面的积木发挥作用。

隐藏掉公告变量,切换造型,设置名为“游戏数据传输”的云变量的值为0,为接下来的事情做准备。


连接?连接!


恭喜你熬到了最后一步!进入该步骤的第一件事就是判断“云匹配用数据的值是否等于“匹配连接数据”的值。这个步骤和上面的游戏结束判断中的一个部分是一样的。也就是说,如果变量变了,就说明有人和你一起进入了匹配状态。此时进行下一步骤。

为什么要判断一下“游戏数据传输”的值是否等于0或者connected呢?因为有些人耐不住性子,在匹配阶段把游戏给切出去,搞其他东西去了。而游戏切出去时就会暂停运行,直到被切回来。此时可能有别人占据了它的位置,开始游戏。而如果不做处理的话,就会有两个人控制同一个角色的情况发生。这是我们要处理的。我们可以看到,在这个部分中,我们让“游戏数据传输”的值最终变为ready,从而让切出游戏后再切回来的人的客户端的判断不通过,然后重新本模块……

现在,我们已经让两个客户端进行了连接。你现在可以用云变量令两个客户端的游戏数据互相传输,且不用担心有第三方插入了。并且我们会不停地把“云匹配用数据”的值在3和4之间切换。当一方离线,该云变量就会停止变动。此时利用计时器判断停止变动的时间是否超过两秒。如果超过了,即说明对方离线。发送“对方离线”的广播后,这个模块完成了他的使命。


END

技术贴没人看的,真的不会有人看的



回复

上一页1 页 / 共 2下一页
活动喵活动喵

大佬出现  官喵打call

点赞0


评论


活动喵活动喵



点赞0


评论


萌新what萌新what

哇靠,好流弊啊,在下佩服,佩服

点赞0


评论


Enjoyl梅西宇宙无双Enjoyl梅西宇宙无双

大老,你有类似这样的作品吗?

点赞0


评论


ftxqgfudiftxqgfudi

想做房间游戏怎么破?

点赞0


评论


主播喵副本主播喵副本

大佬真厉害,我表示看不懂

点赞0


评论


编剧花编剧花

这个是真的强 厉害厉害

点赞0


评论


520669已退猫520669已退猫

厉害

点赞0


评论


霖雨暮风霖雨暮风

疯狂给dalao打喵

点赞0


评论


薄暮晨光薄暮晨光

在下小的佩服,但表示看不懂

点赞0


评论


欣欣向荣233欣欣向荣233

emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞

点赞0


评论


硬件小喵硬件小喵

最后一句,字放大点,再大点,再大点

 

点赞0


评论


过去是星能猫副本过去是星能猫副本

顶 (个_个) 

      

点赞0


评论


LHCKCLHCKC

dalaodalao(666

点赞0


评论


苍穹如玉苍穹如玉

大佬666666666666666666666666666666666666666666666666666666666,在下表示...

 

 

 

 

 

 

 

 

 

 

 

 

看不懂...

点赞0


评论


樊家终结者樊家终结者

???emotion_编程猫_冷漠emotion_编程猫_翻白眼

点赞0


评论


寒意风袭寒意风袭

da lao

点赞0


评论


印泽恩Tim印泽恩Tim

6666666666666666666666666666666666666666666666

点赞0


评论


八魔八魔

好恐怖……

点赞0


评论


寒意风袭寒意风袭

回复保存

点赞0


评论


寒风之下寒风之下

再等几天

我的分区在线比拼系统就要出来了

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

来看看啊

 

点赞0


评论


QwQ奶茶QwQ奶茶

流弊啊,麻麻快来这里有个大佬,他说的我全都………………不懂噢!

点赞0


评论


天韵_天韵_

呵,。

点赞0


评论


Enjoyl梅西宇宙无双Enjoyl梅西宇宙无双

大佬6666emotion_编程猫_厉害了emotion_编程猫_厉害了emotion_编程猫_厉害了emotion_编程猫_厉害了emotion_编程猫_厉害了emotion_编程猫_厉害了emotion_编程猫_厉害了emotion_编程猫_厉害了emotion_编程猫_厉害了emotion_编程猫_厉害了

点赞0


评论


Enjoyl梅西宇宙无双Enjoyl梅西宇宙无双

谢大佬贴

点赞0


评论


星落黑影目前已退星落黑影目前已退

求教案链接

点赞0


评论


user12user12

。。。

点赞1


评论


十二の十二の

回帖收藏~

点赞0


评论


user12user12

emotion_编程猫_点赞

点赞0


评论


user12user12

emotion_编程猫_加油emotion_编程猫_嗨起来emotion_编程猫_厉害了

点赞0


评论