猫史档案馆


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

用户:云业余云业余查看:17087 回复: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


评论

沙发

板凳

2023来考古

这沙发不值钱(Doge


_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


评论

作品是联机作品,没啥问题。这应该是官方的BUG,经常性登陆以后,所有的云变量变成了普通变量,没办法联动。我跟技术喵反馈了,但没有音讯。试着不同时段登陆,或者多重新加载几次,就可以了。

嗯111


Leo韩Leo韩

大佬啊!

点赞1


评论

他不是说自己是萌新吗早知道看着个不买了但我也琢磨到了

别马后炮,行吗?


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

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

点赞0


评论

我自己设想的方法有两三个吧!第一是创建多个一样的房间,玩家云变量编码继续增加,如果玩家编号等于3,等于4则跳到另一个屏幕开始游戏,但这样做的话游戏的体积会很大;第二是在同一个房间内对战;也是让玩家编号继续增加,等于3,等于4的一组对战,然后在设置同步效果的时候把当玩家等于3,等于4的情况加入。

优点是共用一个对战房间节省空间,不过这个缺点也有,如果不细心的话可能会导致混乱,出现很多BUG,逻辑有漏洞的话也容易导致游戏崩溃,积木逻辑也复杂容易混乱。这两种我都没试过,以后有精力可以试一下。

知道了,谢谢大神帮助

你知道什么了


绿色耀西绿色耀西

666

点赞0


评论


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

嗷嗷~

点赞0


评论


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

什么也别说:66666

点赞0


评论


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

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

点赞0


评论

扩容了

神奇

是可以的,假设源码有挂可以买(滑稽)

扩容满了,大约到了8000


_X_X

我可以实现无匹配联机

点赞0


评论

无匹配联机?那么神奇?

前提是要人齐,不齐的话就只能单人

那就不好玩了

不会


绿鸽LvGe绿鸽LvGe

其实那个吃鸡是开源的

点赞0


评论


绿鸽LvGe绿鸽LvGe

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

点赞0


评论

不知道


xiaowenxiaowen

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

点赞0


评论

创建就有哇!不过我现在的技术进步了,用不了那么多了~毕竟这是第一个联机游戏,只是尝试。

公有云变量的上限是10个

扩容