猫史档案馆


【业余课程】几分钟学会联机原理

用户:云业余云业余查看:297 回复:220 评论:297 创建时间:2019-06-07T23:34:52


大家好,我是云业余,是一位接触编程猫差不多半年的萌新。秉着“共同进步,一起学习”的原则,我会以前缀【业余课程】为标题教给大家一些做游戏的小知识和小技巧。方便大家需要的时候搜索。

今天第一堂课,教给大家联机的最基本原理!

联机游戏,是编程猫里最多人想做却不知道如何下手的东西,都觉得联机很难,其实如果去掉其他复杂的东西,联机的核心机制反而是最最简单的!

一、误区

最初我和大多数人一样,都认为联机是大佬才会的东西,是很复杂的,其实不然。按照一开始的想法,联机游戏应该是有很多人同时在匹配,然后随机两两配对,也就是同一个游戏有很多人同时在联机玩。后来发现这其实是错的!

其实联机游戏,就是按照点击匹配按钮的先后,决定最先点击的两个人进入对战。

二、联机的核心机制

在做完《契灵者》后,我才开始思考联机游戏,买了《战棋》看了源码,对于萌新的我,还是不懂。去社区搜索联机教程,发现也是寥寥无几。然后终于有一天,我想明白了。

今天我教大家的是抛开其它复杂的排队,检测离线,如何在两个玩家间产生联动等等东西,这些咱们先不想,咱们就先思考如何匹配!

联机游戏的核心是云变量,有了云变量,才能实现联机,而实现匹配跳转,只需要两个云变量。

三、如何匹配

1、添加云变量模块(如果连如何添加云变量都不会的话,请不用看这个教程了哈),新建一个云变量命名为“玩家编号”,另一个命名为“房间”。

center_image

center_image

2.添加一个匹配按钮,在按钮上拼积木。

center_image

接下来解释一下这段积木的意思。

当开始匹配按钮被点击的时候,让云变量“玩家编码”增加1,云变量“房间”增加1,普通变量玩家等于此时的云变量“玩家编码”。

问:为什么要让云变量加1呢?

第一个云变量“玩家编码”,是为了在联机中区分谁是玩家1,谁是玩家2,不同的玩家看到的画面当然都是相对的,这个暂时不说,今天单说匹配。

想象一下,老师手里拿着一副按从小到大顺序放好的数字扑克牌。老师要你们一个一个上来领一张扑克牌。第一个拿到扑克牌的人,手里的扑克牌就是1,轮到第二个人的时候,他拿到的扑克牌自然就是2了,第三个人拿到的,当然就是3的扑克牌了,以此类推。

然后老师说,拿到扑克1和扑克2的人,上台来打架……(当然是不可能的!)然后对战就开始了。

同理,如果云变量“玩家编码”的初始值是0,点击一下,云变量变成1了,然后用一个普通变量去等于此刻云变量的值,那么你的号码牌已经确定了,你就是编号为1 的玩家。如果这时候有第二个人点击,云编号是不是又增加1了?那么此时云变量等于2,第二个人也用普通变量等值于此刻的云变量,那么第二个玩家的编号就等于2了。

这个时候玩家的编号就确定了,第一个点击的是玩家1,第二个点击的是玩家2.

既然已经凑齐人了,是不是该开打了?如何判断人够了?这就是云变量“房间”的作用!

每点击一次,房间云变量增加1,所以有两个人点击匹配,房间的值就变成2了。也就是说,现在有两个人了,可以开撸了。所以后面的“如果”语句,就是判断是否该跳转对战了。

于是,可以开始联机了。

问:如果我拼命点击,岂不是自己和自己打了?

理论上是这样,但为了防止同一个玩家没事做,自己点两次匹配,一般都会加一个匹配中的造型,然后来点动画效果,加个积木重复执行直到房间人数等于2。这样的话,按钮程序会在动画效果里循环,同一个玩家点击便不会有变量的改变了。

问:如果有人在对战了,其他人也点击了怎么办?

当然,刚才给大家的代码是不齐全的。可以增加一个当点击时,如果房间人数小于2,正常匹配,否则新建对话“有人在对战了”或者干脆没反应,自由发挥。

问:联机真的这么简单么?

联机当然没有那么简单,要考虑的东西很多。比如有人觉得不好玩喀拉一声就直接关掉网页或者界面怎么办?房间岂不是一直被霸占着?比如怎么样让玩家1看到的和玩家2看到的画面是相对的,很多东西都要考虑,还需要用到很多的云变量去同步两个玩家的状态。

所以建议大家如果要做联机游戏,一开始做些简单的。比如联机石头剪刀布,联机掷骰子之类的,只需要一两个云变量就能同步的游戏。

最后说一句,光看教程没有用,只有正真动手做才能真正进步和学会知识。

贴上我的联机游戏《吃鸡战场:粒子战衣》给大家体验一下。以后会开源的。https://shequ.codemao.cn/work/30193091?entry=copy_work_url

center_image

 


回复

上一页1 页 / 共 8下一页
新作审判者笑终生新作审判者笑终生

好厉害呀,ヾ(≧O≦)〃嗷~emotion_星能猫_爱你

点赞0


评论


_X_X

萌新也这么牛

点赞0


评论


新作审判者笑终生新作审判者笑终生

快点开源吧

点赞0


评论


新作审判者笑终生新作审判者笑终生

还是有点不明白呀emotion_雷电猴_疑问

点赞1


评论


莲阿修贝尔莲阿修贝尔

喵喵~这个技术帖子很厉害呢!顶上去,讲解的很好哦!继续加油!

点赞0


评论


YDSmnxYDSmnx

跟我的不太一样啊

点赞0


评论


_X_X

雷电猴加个精呗

点赞1


评论


deer_再见deer_再见

讲得真好emotion_编程猫_点赞

虽然我一个字也没听懂

点赞1


评论


YDSmnxYDSmnx

今天又仔细看了一遍,额问下,这个到底是排队联机的呢,还是同时有很多人在联机呢?搞不懂(捂脸)

点赞0


评论


MM疯MM疯

emotion_编程猫_点赞

秀儿是你吗?

点赞0


评论


主播喵副本主播喵副本

大佬大佬

点赞0


评论


栗子安安栗子安安

大佬大佬

 

点赞0


评论


I桔汁糖浆II桔汁糖浆I

这个教程贴真的nice!

看看我之前做的教程,都糊一块了。。。

点赞1


评论


_X_X

这么说来,我已经会了?

点赞0


评论


UniqueMatterUniqueMatter

我还以为是编程语言呢。。。

点赞0


评论


发光的苦力怕发光的苦力怕

实用的教程,顶顶~

点赞0


评论


写得很棒呢,点赞

点赞0


评论


绿色耀西绿色耀西

ohhhhhhhhhhhhhhhhhhh

点赞0


评论


帝王计划帝王计划

我懂耶

点赞0


评论


帝王计划帝王计划

问个问题您那个是联机匹配的吗?进入之后
就和平常的一样吧,各运行各的

点赞0


评论


Leo韩Leo韩

大佬啊!

点赞1


评论


阳光的流熔怪Uyt5阳光的流熔怪Uyt5

问个问题:怎样实现多组用户两两匹配的效果?

点赞0


评论


绿色耀西绿色耀西

666

点赞0


评论


刘佳宜邓雨琪等于琪刘佳宜邓雨琪等于琪

嗷嗷~

点赞0


评论


再贱就再见Star再贱就再见Star

什么也别说:66666

点赞0


评论


物理还需悟理物理还需悟理

18个公有云变量是怎么回事?(好不理解耶)

点赞0


评论


_X_X

我可以实现无匹配联机

点赞0


评论


绿鸽LvGe绿鸽LvGe

其实那个吃鸡是开源的

点赞0


评论


绿鸽LvGe绿鸽LvGe

语音联机怎么做,也是这个原理吗?

点赞0


评论


xiaowenxiaowen

为什么会有18个公有云变量

点赞0


评论