记录:状态同步来实现行走功能;(内容枯燥,享受成功带来的快乐)
什么是状态同步:
a.我们所有的游戏逻辑的计算都是放到服务器上的,以服务器为准;
b.客户端负责上传玩家的操作 以播放“动画”来展示出来服务器上最新的状态的效果;
c.当服务器验证完客户端的操作是否合法后产生计算变化
d.如果有变化,服务端就会广播这个变化状态,给对这个变化感兴趣的玩家("AOI玩家,周围玩家")
e.客户端就根据状态的变化,展示内容出来
角色行走是如何同步给其他玩家的:
a.我们就是要实现游戏服务器上跑游戏地图+逻辑;==>数据逻辑,没有画面逻辑
游戏数据而言 一个地图就是一块x,y,z坐标数据的集合;
服务器update()不断迭代;==>行走;
b.当我们某个客户端,发起行走的时候;
发起一个消息给服务器;
服务器会受到这个消息,把它放到事件队列里来,然后来进行处理;
处理:消息的合法性(比如:玩家ID是不idle,Run状态等,放技能不能行走等游戏逻辑);
刚开始 :idle,--->服务器上寻路出来,==>服务端就开始执行玩家对应的数据实体来进行按照路径 移动了 引起状态的变化:idle===>run;把这个操作,广播给能看到这个玩家的所有 玩家 (包括自己)
A的状态: run===>操作===>移动; ===>A自己,发给B
A收到了,本地寻路,===>客户端播放动画移动A到指定的点==>
B收到了A的移动 ===> 让A本地寻路===>移动到A指定的点==>
服务端就会检测到玩家走到了目的地,到了Idle状态,Run==>Idle===>会把玩家A的状态 发给(A,B)
A收到这个状态 run ==> idle ==>同步服务器的位置;
每一次状态改变都同步就叫状态同步,中间的行走状态,服务器走服务器器的,客户端走客户端的服务器走的过程当做,状态变化了==>客户端==>同步==>根据最新的状态来播放动画
结:你走你的,我走我的,服务端为准,服务端会广播玩家状态的变化给他感兴趣的客户端,客户端根据最新的状态展示动画