方案2还是不行!方案二不管怎样做,所有客户端还是不能完美的进行同步.
另外,游戏太卡已经通过两个方面得到了一定程度的缓解.
1.游戏中的socket设还默认的delay,即数据包在系统中有缓冲.
之前没用的时候因为游戏本来都不能正常运行,所以就看不出.总之设置了delay就改善了一些.
2.客户端不再频繁调用::ioctlsocket等socket函数来检查网络数据,而是直接检测程序中的缓冲区.
而程序中的网络缓冲区由一个专门的线程负责填充.这样也改善了一点点运行时的不流畅.
///
最终我还是要使用回之前的方案一:
即介面数据与运行数据分离.
在没有网络包的情况下由介面根据当前数据预测下一步的画面.
然后,当网络包到达后,通过运行数据刷新介面数据.
不过这样的话,在网络不稳定的情况下,就有可能出现画面的稍微倒退.
当然,这一改动目前主要是针对玩家人物的移动方面的画面的.
还有就是,现在如果游戏中的运行数据要依赖介面数据的所有部分都要更正才行.
嗯,其实运行数据本来就不应该依赖介面的任何状态的。
方案1只要针对移动的物体,而移动的物体目前有:
完成状态
1.炸弹, later
2.人物, ok
3.人物的坐骑 ok
现在人物在网络中流畅运行的问题已经解决了关键部分,已经可以在两个游戏程序里流畅运行了.
下面要在实际局域网中测试一下.
而之前在局域网中好象还有一个连接的BUG.
要麻烦朋友真的很不方便,本来应该使用虚拟机先作测试的.
不过由于目前实际的API还是OPENGL.因此,虚拟机的显卡就不够用了.
看来还是应该快点把底层API换成SDL就好了。
短期目标:
1.完成局域网中流畅运行
2.更改游戏流程,使用游戏真正能够玩.
3.重新激活录象功能