游戏说明
每个玩家控制一个飞机,在网络世界里尽情的pk。前期简单的操作就是左右键、飞行或者停止以及射击键,以及技能。击中算死亡,死亡后,会再度复活。
同步策略
帧同步
游戏的所有逻辑都在服务器,客户端将操作发给服务器,服务器每帧发送位置坐标给客户端,客户端绘制游戏实体。
- 优点:简单。。。绝对同步
- 缺点:服务器压力太大,另外,一旦有延迟,客户端就是断断续续的。我觉得适用于局域网。
关键帧同步
游戏的所有逻辑和数据都在服务器,这是肯定的,否则玩家会作弊。客户端会把操作发给服务器,但是服务器不会每帧同步,而是在两种条件下进行同步。
- 状态改变时,比如转方向,变速度
- 当处于移动时,每过1秒或者更久进行状态同步
那么客户端会根据服务器的状态调整,和帧同步的完全依赖服务器的坐标不同的是,客户端多了一些移动,状态改变等逻辑,还有同步状态对的逻辑。同步状态的算法将决定游戏是否流畅,简单的即时同步,将会让显示看上去有点跳跃。
- 优点:移动顺滑,发包少
- 缺点:同步不是绝对的,会和服务器的真实位置有略微差距
逻辑实现
服务器发送过来的内容将会是结束时间和结束时状态,客户端会用差值的方式在结束时间内达到这个状态。由于是用差值的方式,所以客户端会比较顺滑。
关于服务器和客户端时间同步
目前我认为在相同的时区内,时间是同步的。但是依靠这个非常不靠谱,比如玩家设置成了别的时区,或者长期不同步时间,或者手动改时间。简单的策略是,在登录时,获取服务器时间,并和本地时间进行比较,将差值记录下来,并根据差值计算当前的服务器时间。这是一个粗略的计算。