生成其他的玩家
现在我们成功的进入了服务器,接下来就是要生成玩家了
那要怎么去生成呢
我们有这样一个代码
字面意思很好理解,类似于接收到广播的代码,但是只有在你加入服务器的时候会触发
于是我们可以这样
1.新建立一个专门生成克隆其他玩家的角色
2.建立一个叫做“计数”的变量,作用是计数
3.编写代码
第一行
这一行代码刚刚解释过了这里就不提了
第二行
等待房间的玩家数量大于0我们都知道,你所进入的服务器玩家数量肯定不会是为零,因为那个服务器里至少有你自己
可是为什么一定要检测玩家数量呢
是这样的,因为玩家会有设备延迟
只有判断玩家数量,才能检测是否进入服务器,如果没有进入服务器就会影响到第四行代码
这时聪明的小朋友就会想到:既然要判断是否进入服务器,那么用延迟检测是不是也可以呢?
很聪明啊,但是不够聪明,让我来说明一下为什么不能用延迟检测
为什么不能用延迟检测
首先,值得称赞的一点是:
如果你想到了用延迟检测判断进入服务器,说明你已经成功的记住了刚刚在服务器小技巧中的知识
太棒啦!为你自己学会了新知识鼓鼓掌!
回到正题:延迟检测确实可以判断进入服务器,但是会有风险!
因为这是一个类似于广播的代码,所以他的运行是几乎程序无延迟的
这也就造成了一个问题:
因为玩家会有网络延迟,所以玩家不会在加入服务器的一瞬间就获取到其他玩家数据
这也就出现了,虽然进入了服务器,但是服务器玩家数据是空的
这会给之后的生成克隆其他玩家造成出错
但是没关系!
经过我不懈努力的研究,终于找到了长寿的秘密,最终功夫不负有心人
通过实验发现(这个实验有点麻烦你们就不用做了)
要是想检测玩家是否收集到数据,可以从玩家数量下手
只要他大于0,就证明了他收集到了数据
这也就是这条代码存在的作用了
第三~六行
因为这几段是在一个循环里的,所以我把3~6连起来讲(也是这一节最难的)
先看流程图
流程图
在这里我们涉及到一个遍历的概念
这个时候就会有好奇的小朋友要问问题了:
哎呀,这个遍历是什么意思啊?我不懂哎,遍历可以吃吗?
什么是遍历
遍历是一种经典的基础编程语法
举个例子:
皮卡丘在CCW上班,他发现公司楼底下有7家餐馆
为了吃遍所有的餐馆,防止遗漏
于是皮卡丘花了一个星期(7天)时间把每个餐馆吃了一遍
一个餐馆没漏、也没有哪个餐馆被吃了好几遍
这就叫遍历(是不是很简单)
为什么要用遍历
就像刚刚说的:遍历就是从头到尾的,不多不少的,把每一个都过一遍
因为我们要做的就是把服务器中的每一个玩家都生成克隆一遍,所以用遍历是一个不二之选
不过仔细观察的小朋友会发现:
这个计数器归零了之后直接就开始克隆了,那不是会克隆一个“第0个玩家”吗?
哎~对了!我们就是要克隆“第0个玩家”
0号玩家
这个就有点难解释了,但是先说结论:
由于MMO的特点,所以玩家的编号是从0开始算的,如果不从0开始遍历,就会漏掉一位玩家
这其实和计算器的计数有关,如果大家有计算机常识的话,就会知道,计算机是从0开始数数的
至于为什么计算机是从0开始数数的,这个我在这还真解释不清(太长了)
感兴趣的可以自己上网查查
什么是会话ID
既然都讲到克隆了,那就来讲讲会话ID
在MMO的克隆中,每个克隆体都有自己的会话ID
在这里,会话ID有点类似于身份证ID卡(一个象征身份的独一无二的的编号)
是让克隆体记住自己身份的一个“私有变量”
现在这个ID数据源就相当于是这个克隆体的名字了
很像是汽车上的车牌号,一串没有规律的编号,主要用来区分的
具体怎么用我会在后面的环节讲
太棒了!你已经学会玩家的生成啦!
<iframe
width="100%"
height="800px"
scrolling="no"
src="https://www.ccw.site/embed?id=pikaqiu101/pika/Lec2/02&type=comment"
title="{联机2-生成其他玩家}"
frameBorder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowFullScreen
scrolling="0"
></iframe>