猫史档案馆


【业余课程】详解联机匹配模块

用户:云业余云业余查看:18 回复:66 评论:18 创建时间:2020-03-17T01:39:46


好久没写教程了,为了让大学都能学会联机,我正在创作联机教程作品,会把联机用到的所有模块都教一遍。今天完成了联机模块的讲解,先放给大家学习。真正的作品里边有形象的演示,希望大家都能做出自己心仪的联机作品吧!

匹配模块

  

  匹配是联机的第一步,也是入门时候比较难的一步。

首先,匹配的原理是啥怎么才能匹配玩家?很多人在这一步就被难住了。这不怪大家,我当初也是一脸懵逼,后来喵了一下,然后就灵光一闪融汇贯通了(其实不是!)……-当初是在论坛里把所有关于联机的帖子都翻了一遍,这才慢慢融会贯通的。-那时候翻到《战棋》的源码,感叹作者的排队联机牛掰的同时,自己身为一个萌新却是难懂大神的思路。后来我终于想到了更加简单的联机

匹配方法:

  

  1.首先创建一个公有云变量(不是私有哦),我习惯命名为“玩家编号”。

  

  -2.创建一个本地普通变量,命名为“本地玩家编号”。-然后我先上积木,待

  

  会儿再来解释意思。

center_image

  

  现在我们来看一下,刚才你点的那一下按钮,里边的程序运行到底发生了什么

  

  事情。(大家可以在作品里拼出这段积木,写在匹配按钮里,匹配按钮三个造型)

  

  对照着点击按钮后变量的变化,咱们来看一下第一段匹配积木。

center_image

截图中的这一段积木,是给匹配的玩家编个号码,以便于区分两个玩家看到的不同画面和操

作对象。还有就是记录有多少个人在匹配,如果云变量等于2,就是说有两个人点击了匹配,那么咱们就可以成功切换屏幕进入对战了。

咱们再来分析一下。为什么要让云变量玩家编号增加1呢?

很简单,这是为了记录现在有多少人按下匹配按钮。

你可以把云变量玩家编号想象成一个房子,每当有一个玩家点击匹配的时候,就等于进入了这个房子里。空的房子,里边没有人,所以没人匹配的时候,云变量为0;当有一个人点击匹配的时候,等于房子里进去了一个人,所以要让【云变量玩家编号】增加1啦

  那为什么又要设置普通变量本地玩家编号等于云变量呢?-这么做是为了区分两个玩家,给匹配的玩家编个号码。这样在对战的时候,才能让程序分辨现在操作的是哪个玩家,看到的画面和操作的角色是哪个。不同玩家看到的画面都是相对的,这个咱们后面再讲。

  

  用云玩家编号记录了房间人数以及给匹配的玩家编号以后,咱们就要让这段程序进入一个循环,否则如果没有进入循环,自己再次点击就会与自己匹配,再次增加云编号人数和重新给玩家编号,就会出现BUG。-进入循环积木后,按钮就会一直改变大小,直到满足“房间有两个人了”或者“玩家自己取消了匹配”这两个条件,才会退出循环,进入下一个积木程序。(补充:在进入循环之前,应该还要加个广播让原本隐藏的取消按钮出现,这里忘记加了。)

  

  然后咱们来看最后的下半段积木。

center_image  如果满足了循环退出条件,那么肯定就会出现两种情况中的一种。所以咱们分别用如果积木来规定出现的每一种情况,该怎么做。-

  第一种情况,就是匹配成功了,云变量变成了2,说明有两个人点击了匹配。既然匹配成功,为了让玩家能够看到“匹配成功”几个字,咱们等待0.5秒,然后就把匹配的两个人送到对战屏幕去,这样完整的匹配过程就完成了。

  

  因为其它玩家没有点击匹配按钮,所以他们并没有进入积木点击后的程序,即便云变量改变,对没有匹配的玩家来说,也是没有影响的。就算有玩家点击了匹配,但如果云变量也就是房间人数大于2满了,那么他就不满足进入匹配的条件,就会显示提示“房间对战中,请稍后”。这样的话,他也同样进入不了匹配程序,从而不会受到切换屏幕的影响。

  

  然后是第二种情况,玩家自己取消匹配。这里我设置了一个普通变量“取消”,用数字“0”,代表默认不取消,用“1”代表玩家选择了取消匹配。当玩家点击匹配时候,会发送广播,让原本隐藏的取消按钮显示。当玩家点下取消按钮的时候,按键隐藏,同时设置取消的值为1,也就是告诉程序,我不匹配了!-所以这也是为什么设置“取消=1”的时候退出循环。如果是因为玩家自己取消退出循环的,那么我们就要用如果积木,执行玩家取消匹配以后的操作。

  

  玩家自己取消匹配以后,可不单单是直接切换到“开始匹配”造型而已。因为你点击匹配的时候,使得云变量增加了,还给你自己编了号,然后点取消按钮的时候,变量取消的值也变了。所以如果分手了,请把我给你的所有东西还给我!-于是你就看到了,如果取消=1,云变量玩家编号减掉1(等于有个人不在房间里了),自己的本地编号也要还原,设为0。最重要的还有变量取消的值,也给变回来,等于0,否则会出BUG,导致无法匹配。

  

  至此,匹配的完整机制已经形成。这个匹配机制讲的是“先到先得”,即哪两个人先点了匹配,就给哪两个人进去对战。-大家不要光看不练,建议每学一个模块,都要动手制作试一试,这样理解才会加深。入门了匹配以后,接下来就是联机数据模块了。-准备好了吗?OK,进入下一课吧!(以后作品里每搞定一个模块,我就 先发一个关于这个模块的教程)

  最后还需要补充一段程序,也就是:如果刚开始的时候,在线人数小于等于1,就让云数据恢复初始,清零。如下图。

center_image

 

  这是防止只有一个玩家在线的时候,点了匹配,退出以后再次点击匹配能和自己配对,也是清理房间数据的一个小模块之一。剩下的房间清理模块,我会放到以后说。当然,如果你想测试匹配按钮是否成功,在做作品的时候,可以先把这段积木拆了,测试完再装回去。

  

  

 


回复

上一页1 页 / 共 3下一页
云业余云业余

求官方加精了喂!让更多人学习到联机知识!

点赞1


评论


墨绿色的雨墨绿色的雨

顶一顶emotion_编程猫_点赞

点赞0


评论


BW妖妖灵(2号)BW妖妖灵(2号)

666,我必须要收藏

点赞0


评论


教程喵教程喵

dd

点赞1


评论


WE丶辰风WE丶辰风

期待你后面的教程.赞赞赞!

点赞1


评论


WE丶辰风WE丶辰风

DD

点赞1


评论


北酱北酱

加精!

点赞0


评论


无音音音音无音音音音

如果分手了请把所有东西还给我哈哈哈哈哈哈哈哈哈哈哈草

点赞0


评论


一只亿易喵吖一只亿易喵吖

这些按钮的我都知道,但是联机游戏的界面我却无法做出来,因为用两个号试了好几次就是看不到对方的移动和攻击emotion_编程猫_紧张emotion_编程猫_冷漠

点赞1


评论


传说中的神眷传说中的神眷

可以是可以,但是联机中怎么移动啊

点赞0


评论


SYS太阳不及你暖心iSYS太阳不及你暖心i

emotion_编程猫_加油emotion_编程猫_加油emotion_编程猫_加油

点赞0


评论


KLPilMC闪电苦力怕KLPilMC闪电苦力怕

emotion_编程猫_加油

点赞0


评论


名字是什么a名字是什么a

喵d

点赞0


评论


後德载物後德载物

大佬能不能发个帖子讲联机心跳测试?我不会啊T _ T(都是老粉了,就发一个教程吧)

点赞0


评论


CJP碧空万顷CJP碧空万顷

明白了

点赞0


评论


坏坏_坏坏_

大佬又重新了,捕捉

点赞0


评论


小东呀小东呀

emotion_雷电猴_围观

点赞0


评论


欲买桂花同载酒,欲买桂花同载酒,

emotion_编程猫_加油emotion_编程猫_加油emotion_编程猫_加油

点赞0


评论


幻梦无双幻梦无双

emotion_编程猫_加油

点赞0


评论


23K不纯金滑稽23K不纯金滑稽

收藏

点赞0


评论


MC-7UMC-7U

emotion_编程猫_点赞emotion_编程猫_嗨起来

点赞0


评论


MC-7UMC-7U

emotion_编程猫_点赞

点赞0


评论


唯爱_晨曦骄阳唯爱_晨曦骄阳

center_image

点赞0


评论


皇家666皇家666

emotion_雷电猴_笑趴emotion_雷电猴_围观emotion_编程猫_点赞emotion_编程猫_谢谢老板

点赞0


评论


BSS梅者如西BSS梅者如西

真棒,我学废了

点赞0


评论


细心的草灵灵As0X细心的草灵灵As0X

emotion_编程猫_冷漠

点赞0


评论


云游box3der尖头叉子云游box3der尖头叉子

emotion_雷电猴_疑问

点赞1


评论


勤劳的流星猫zkqY勤劳的流星猫zkqY

emotion_编程猫_加油

点赞0


评论


野生编程猫野生编程猫

emotion_编程猫_搓头

点赞0


评论


马虎的星能猫Gqjt马虎的星能猫Gqjt

emotion_编程猫_谢谢老板

点赞0


评论