现在我们的游戏已经很完善了,但是我们还缺少一个最重要的东西:多人!
多人游戏是小猫派对的核心玩法,没有他怎么行?
那么我们现在就来编写多人的算法!
克隆玩家
在之前的四课教程中,有部分MMO我们已经编写了,那些MMO的代码不会再做解释。
我们创建一个自定义积木,用这个积木来克隆其他玩家的一些克隆体。
这里,我们一并克隆对方玩家的角色、武器、子弹。
然后,当玩家进入游戏中,我们需要先一次性克隆当前房间的所有角色,除了玩家自己:
这里我们用“i”作为循环变量,克隆所有的玩家的角色。
接着在游戏中,判断是否有新玩家进入游戏,如果有新玩家进入游戏,那么我们就需要新克隆一个玩家:
因为这个hat积木,所有克隆体都会执行,所以不想克隆体炸掉,最好先判断一下他不是克隆体。
如果是本体,再执行下面的操作,先看看这个加入的新角色是不是自己,如果不是自己,就为这个玩家创建一个新角色。
同步信息
有了玩家克隆体,我们接下来就要为这些新的克隆体写代码了!
首先在“当克隆体启动时”写其他玩家的代码:
我们在循环中和其他玩家进行同步。
这里我们使用到了其他玩家的坐标,方向,被当做造型的缩放。
所以接下来我们要开始同步上传自己的信息了:
还记得我们之前在第二课写的自定义积木吗?这时就派上用场了,只要在那后面添加积木,就可以在我们的循环中添加积木!
而玩家的位置因为在制作碰撞箱时已经添加过了,这里就不重复添加了。
更多数据
但是mmo只能传几个数据啊,是不是还是不够啊?
武器、子弹、血量什么的都没有同步,不用担心。
因为我们有“额外数据”!
我们创建个名为“上传MMO”的列表,这个列表我们专门用来存放其他的数据,比如上面提到的三个数据。
所以我们需要改几个地方的代码:
武器:
子弹:
玩家:
背景:
这些地方就是所有的更改上传MMO的地方,部分内容在前几课的代码总览中已经出现了,列表总共7项,分别对应:
- 武器X
- 武器Y
- 武器角度
- 子弹大小
- 武器造型
- 近战武器攻击力
- 血量
我们将这些数据打包上传:
这个代码在上文的“玩家的自定义积木操作”中可以看见。
武器同步
接下来,我们来写武器的代码,我们要在武器被克隆时显示他对应的玩家:
首先是移动到武器的位置,这里我们继续用data拆分其他玩家的额外数据,
然后是面向其他玩家武器的角度,切换到对应的造型,翻转也设置为对方的角度对应的翻转。
然后我们在近战攻击状态下(即,攻击力不为0),检测碰到了碰撞箱,就让血量减少近战武器攻击力。
如果攻击了其他玩家,那么就给其他玩家一个速度,让他向后上面飞去。
子弹同步
武器已经同步了,步同步子弹怎么行呢?
接下来我们来同步子弹。
子弹分为两种,一种是像子弹本体那种附着在武器上显示的,另外一种就是在舞台中被射击出来的子弹,这两种我们要分开处理,我们之前已经给每个玩家克隆了一个作为显示在武器前面的子弹,我们这里将其代码加入“当克隆体启动时”:
有了这些代码,我们就能在子弹克隆时,通过判断key是否是子弹来决定这个子弹是跟随其他玩家。
如果要跟随其他玩家,就从玩家额外数据中获取自己需要的数据,来位移到对应位置并设置为合理的大小。
因为之前我们在射击中已经编写了广播MMO的代码,所以我们这里只需要接收MMO的广播就行:
和之前接收4D广播的原理一样,这里不再过多赘述。
但是MMO还有个最重要的代码,那就是玩家退出时删除玩家的克隆体,我们需要在武器、子弹、玩家三个角色中都添加这段代码:
现在,你的MMO已经完美的添加好了,可以和其他玩家开黑了!
效果如下:
<iframe
width="100%"
height="800px"
scrolling="no"
src="https://www.ccw.site/embed?id=WhiteCat101/baimao/Lec5/01&type=comment"
title="{小猫5-显示其他玩家}"
frameBorder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowFullScreen
scrolling="0"
></iframe>