用户:云业余查看:18 回复:66 评论:18 创建时间:2020-03-17T01:39:46
好久没写教程了,为了让大学都能学会联机,我正在创作联机教程作品,会把联机用到的所有模块都教一遍。今天完成了联机模块的讲解,先放给大家学习。真正的作品里边有形象的演示,希望大家都能做出自己心仪的联机作品吧!
匹配模块
匹配是联机的第一步,也是入门时候比较难的一步。
首先,匹配的原理是啥怎么才能匹配玩家?很多人在这一步就被难住了。这不怪大家,我当初也是一脸懵逼,后来喵了一下,然后就灵光一闪融汇贯通了(其实不是!)……-当初是在论坛里把所有关于联机的帖子都翻了一遍,这才慢慢融会贯通的。-那时候翻到《战棋》的源码,感叹作者的排队联机牛掰的同时,自己身为一个萌新却是难懂大神的思路。后来我终于想到了更加简单的联机
匹配方法:
1.首先创建一个公有云变量(不是私有哦),我习惯命名为“玩家编号”。
-2.创建一个本地普通变量,命名为“本地玩家编号”。-然后我先上积木,待
会儿再来解释意思。
现在我们来看一下,刚才你点的那一下按钮,里边的程序运行到底发生了什么
事情。(大家可以在作品里拼出这段积木,写在匹配按钮里,匹配按钮三个造型)
对照着点击按钮后变量的变化,咱们来看一下第一段匹配积木。
截图中的这一段积木,是给匹配的玩家编个号码,以便于区分两个玩家看到的不同画面和操
作对象。还有就是记录有多少个人在匹配,如果云变量等于2,就是说有两个人点击了匹配,那么咱们就可以成功切换屏幕进入对战了。
咱们再来分析一下。为什么要让云变量玩家编号增加1呢?
很简单,这是为了记录现在有多少人按下匹配按钮。
你可以把云变量玩家编号想象成一个房子,每当有一个玩家点击匹配的时候,就等于进入了这个房子里。空的房子,里边没有人,所以没人匹配的时候,云变量为0;当有一个人点击匹配的时候,等于房子里进去了一个人,所以要让【云变量玩家编号】增加1啦!
那为什么又要设置普通变量本地玩家编号等于云变量呢?-这么做是为了区分两个玩家,给匹配的玩家编个号码。这样在对战的时候,才能让程序分辨现在操作的是哪个玩家,看到的画面和操作的角色是哪个。不同玩家看到的画面都是相对的,这个咱们后面再讲。
用云玩家编号记录了房间人数以及给匹配的玩家编号以后,咱们就要让这段程序进入一个循环,否则如果没有进入循环,自己再次点击就会与自己匹配,再次增加云编号人数和重新给玩家编号,就会出现BUG。-进入循环积木后,按钮就会一直改变大小,直到满足“房间有两个人了”或者“玩家自己取消了匹配”这两个条件,才会退出循环,进入下一个积木程序。(补充:在进入循环之前,应该还要加个广播让原本隐藏的取消按钮出现,这里忘记加了。)
然后咱们来看最后的下半段积木。
如果满足了循环退出条件,那么肯定就会出现两种情况中的一种。所以咱们分别用如果积木来规定出现的每一种情况,该怎么做。-
第一种情况,就是匹配成功了,云变量变成了2,说明有两个人点击了匹配。既然匹配成功,为了让玩家能够看到“匹配成功”几个字,咱们等待0.5秒,然后就把匹配的两个人送到对战屏幕去,这样完整的匹配过程就完成了。
因为其它玩家没有点击匹配按钮,所以他们并没有进入积木点击后的程序,即便云变量改变,对没有匹配的玩家来说,也是没有影响的。就算有玩家点击了匹配,但如果云变量也就是房间人数大于2满了,那么他就不满足进入匹配的条件,就会显示提示“房间对战中,请稍后”。这样的话,他也同样进入不了匹配程序,从而不会受到切换屏幕的影响。
然后是第二种情况,玩家自己取消匹配。这里我设置了一个普通变量“取消”,用数字“0”,代表默认不取消,用“1”代表玩家选择了取消匹配。当玩家点击匹配时候,会发送广播,让原本隐藏的取消按钮显示。当玩家点下取消按钮的时候,按键隐藏,同时设置取消的值为1,也就是告诉程序,我不匹配了!-所以这也是为什么设置“取消=1”的时候退出循环。如果是因为玩家自己取消退出循环的,那么我们就要用如果积木,执行玩家取消匹配以后的操作。
玩家自己取消匹配以后,可不单单是直接切换到“开始匹配”造型而已。因为你点击匹配的时候,使得云变量增加了,还给你自己编了号,然后点取消按钮的时候,变量取消的值也变了。所以如果分手了,请把我给你的所有东西还给我!-于是你就看到了,如果取消=1,云变量玩家编号减掉1(等于有个人不在房间里了),自己的本地编号也要还原,设为0。最重要的还有变量取消的值,也给变回来,等于0,否则会出BUG,导致无法匹配。
至此,匹配的完整机制已经形成。这个匹配机制讲的是“先到先得”,即哪两个人先点了匹配,就给哪两个人进去对战。-大家不要光看不练,建议每学一个模块,都要动手制作试一试,这样理解才会加深。入门了匹配以后,接下来就是联机数据模块了。-准备好了吗?OK,进入下一课吧!(以后作品里每搞定一个模块,我就 先发一个关于这个模块的教程)
最后还需要补充一段程序,也就是:如果刚开始的时候,在线人数小于等于1,就让云数据恢复初始,清零。如下图。
这是防止只有一个玩家在线的时候,点了匹配,退出以后再次点击匹配能和自己配对,也是清理房间数据的一个小模块之一。剩下的房间清理模块,我会放到以后说。当然,如果你想测试匹配按钮是否成功,在做作品的时候,可以先把这段积木拆了,测试完再装回去。