GlacierZ GlacierZ
关注数: 0 粉丝数: 15 发帖数: 603 关注贴吧数: 2
Mbcaster的部分基本联机原理 看mbcaster的代码看了将近一个星期,总体看过一遍,现在正在倒回去一行一行的看,看到应该有一半了吧。鉴于过完年不知道还会有多少时间用在这上面,也就不知道能不能最后完成,所以想着还是先把到目前的进展写出来,如果有人对这个有兴趣可以一同探讨一下。 程序大体流程是先调用mainDatInit函数初始化,再调用Entrance函数,主要是显示菜单及等待菜单输入,一旦做出相应选择开始了联机就开始进入mainRoop循环,每一步的函数为mainStep,直到联机结束。 这个联机器的基本原理是分割成了以gameTime变量标示的时间单位,应该是以毫秒或数毫秒计,我暂时还没找这个变量++的位置,每个时间单位直接用directinput获取键盘信息,写入一个数组,再每两个时间单位向对端发送一次操作数据,其中1P和2P时间单位是交错的。每20个时间单位进行一次同步检测,包括血量和X变量(应该是横坐标,还没看到这个位置),具体把操作数据送给游戏的部分还没看到,应该会是顺延几个时间单位保证对端的数据已经送到。 具体到发送是50个元素的sTask数组,每个元素为一个结构体,如果程序的哪一步需要发送数据就从这50个数组中检测***不为1的元素写入,并将***置1,这个元素接下来就会被send线程发送出去。 线程方面最主要的是hManageTh,hSendTh,hRecvTh,其余还有几个检测游戏的,这里先不写了。hManageTh负责测试连接是否正常,其最主要的作用是如果超过10秒没有对方发送的信息则将socket的地址清空,断开连接。hSendTh负责发送sTask中***==1的元素并将其清空,不停循环。hRecvTh就是负责处理收到的各种数据。 下面是写的几个文档,是目前代码看完的部分,先贴出来。
1 下一页