用户:云业余查看:24 回复:26 评论:24 创建时间:2020-04-26T00:02:08
前面讲的匹配机制,大家都学会了吗?
匹配模块传送链接:《详解联机匹配模块》 https://shequ.codemao.cn/community/259510
匹配成功后,我们就开始最重要的联机同步了!
有很多人找到我想喵机,最常问的问题就是:为什么我这边蹦蹦跳跳,打得对方鼻青脸肿,但另一个玩家却一动不动?甚至从对方的手机画面里看到的我也是一动不动捏?
哦?画面不同步?这是当然的啦!会动才是见鬼了~
问题:匹配了以后,联机不就成功了吗?为什么画面还不同步?
没错,你们是匹配成功了,但联动同步的只是跳转到对战房间这一下而已,剩下的仍然得靠其它公有云变量,才能同步画面。
我们先来个最简单的同步:攻击同步。
你要明白,虽然你们打开的是同一个作品,但作品里的普通变量都是独立的,不会因为对方按下攻击,你这个作品里的人就做出对应的攻击动作,所以画面才会独立而不同步。
要想同步画面,得分两个部分来,怎么做?
第一个部分,是让对方能知道到数据的变化。
首先,我们创建两个公有云变量,一个命名为“玩家1攻击”另一个命名为“玩家2攻击”。
动图都给你们弄出来了,够意思了吧!
创建这两个云变量是用来干啥的?答案是:用来检测对方是不是按下了攻击按钮。
刚开始创建的变量,默认值为0,那我们就默认云变量玩家1(玩家2)攻击=0的时候,代表没有按下按钮,是非攻击状态,ok吧?
然后云变量玩家1(玩家2)攻击=1的时候,代表按下按钮,发出了攻击指令,这也能理解吧?
问题:那怎么知道哪个玩家按下了按钮呢?
所以这就是为什么在匹配的时候要给先后点击匹配的玩家进行玩家编号的原因。给玩家编号,对于同步数据十分重要,也决定了玩家操作的角色。
回到前面的问题,我怎么知道是谁按下了攻击按钮呢?其实也不难,先上积木,再来解释。
看到上边的积木图片了吗?当攻击按钮被按下的时候,我们分情况进入不同的执行。
假设我是玩家1,我按下了攻击,改变的变量只能是玩家1攻击的云变量,而无法改变玩家2的攻击数据;我是玩家2,按下按钮以后,同样无法改变玩家1的数据。
所以,即使我们只看到玩家1攻击和玩家2攻击这两个云变量,而看不到画面,我们也能通过这两个数据的改变得知对方是否按下了攻击按钮。(谁的数据变成了1,谁就是按了攻击)
可是光我们自己看到数据的改变,我们自己知道谁按下了攻击没用啊!你还得让对应的操控角色动起来!
所以让角色做出对应的动作,这是第二个部分。
既然我们都知道云变量变成1代表按下了攻击,那么我们就得告诉给相应的角色听,让他们做出对应的动作。
首先是把积木写在哪?这你又得分玩家编号了。
在这个演示作品里,我设置的是玩家编号1控制蓝色,玩家编号2控制红色。那么在做联机作品的时候,最常用的换位思考来了。
先假设我是编号为1 的玩家,操控的是蓝色。那么当我自己按下攻击的时候,我自己的角色不需要依靠云变量也能做出攻击动作。
那谁要靠云变量才能做出对应动作呢?当然是和你对打的那个人,也就是红色。
所以我们需要同步红色的攻击动作,那就把积木写在红色圆球那里。
(上图需要说明的是,在屏幕1的话用“当开始被点击时”,其他屏幕有切换动作的,最好都用“当屏幕切换到某屏时”比较好,也就是屏幕切换到该屏后才开始执行,这样不会占用太大的电脑运算内存)
同理,当你想象自己是玩家2的时候,要同步的当然只是你对手玩家1,也就是蓝方的动作和数据了。所以我们把同样的积木写在蓝色圆球上边,区别是把云变量“玩家2攻击”换成了“玩家1攻击”。
然后……不知不觉攻击同步就完成了!
我用自己的手机和电脑试一下(蓝色是我玩家1,红色是对方):
咳咳,因为只是粗制滥造的演示,结果可能还不尽人意,但起码数据和画面是真实的同步了!大家可以优化一下点击,时间冷却等等去试一下。
其他数据的同步,都是在此的基础上举一反三,先学会最简单的,知道懂的了它的原理,才能进行更复杂的联动。
进阶以后,比如我不止攻击一个技能按钮啊,我还有跳,蹲,怎么搞?那你就按跳的时候将刚才那个云变量设置为2代表跳,蹲设置为3代表蹲!其他都一样!接收到特地数值改一下动作就行了!
这便是举一反三!
后边更复杂的不多说了,点一通百,原理都是在这个基础上变形的。
最后总结:1.创建专属不同编号玩家的检测公有云变量;
2.同步画面,要靠云变量的数据变化,然后让对应的角色根据云变量执行动作。
当你成功同步攻击以后,继续多一些不同的同步尝试,多动手做,光看可是学不会的哦!
这期就到这里,下课!