基于前面2篇文章,我们已经可以让游戏在端到端上连动起来,那么这次我写了一个飞机的小游戏。
效果
下面是截图:
2边各控制一台飞机,在2端实时互动。
为了好看,我加入了简单的特效,背景光环与一个半月,我称之为月金轮。
如何架构
主体涉及到的动画逻辑是 坐标的概念与定时器。
其中子弹是靠定时器触发的,如下面代码所示,每0.8秒产生一次射击。
月金轮相对于飞机是二级旋转,对应坐标系如下
需要将这2个坐标系的旋转合成。实现如下:
将月金轮设为背景光环的子节点。
背景光环与月金轮同时旋转。
引申
和前面文章不同的是,现在似乎2端似乎不太同步了。
我们看下图
除了位置受对方控制外,我们对月金轮的特效都是两边各自渲染,由于2端的所分配的CPU状况不同,必然会
产生这些差异。
这就产生了2个分支:
完全同步与关键同步。
我把2端简化称为A,B端。
相对应的投影称之为A', B'。
完全同步:A'的所有动作绝对与A一致,终端2上的A'的每个旋转角度都有A同步过来,这样当终端1本身卡顿或者网络延迟时终端2上的A'表现会
很卡。
关键同步:各自按同一套机制渲染,终端1上的A将结果同步到A',终端2上的B将结果同步到B'。
王者荣耀与本例采用的是关键同步,2端的动作并不是绝对一致,也无法做到绝对一致。
最后放上我们的视频。
http://v.youku.com/v_show/id_XMzA5MDAwMDg2NA==.html?spm=a2hzp.8244740.0.0