2006_06_26

原创 2006年06月26日 11:51:00

因为返修的硬盘搞到手了,所以这几天在重装系统,以及把备分在其它地方的数据整理进来。

 

游戏分为数据帧与视频帧,数据帧就是游戏时间,视频帧只能更新画面的时机而已。
游戏的时间是以一个游戏的数据帧为基本单位,而这个数据帧的产生就交由一函数来完成,而这函数的时间不一定是系统时间。
那么游戏的内部循环看起来就应该是这样子:
while(gameloop)
{
      if (数据帧是否触发)
     {
           获取输入
          更新游戏数据          
     } 
    
    if (视频帧是否触发)
      更新游戏画面
}

游戏的录象数据片段则可能是这样的:
帧序号   操作       数据
102        输入        玩家1 按下"上"
102        输入        玩家1 按下"右"
102        输入        玩家1 按下"A"
105        输入        玩家2 按下"B"
...............

 

而网络中的数据同步也很简单,下面S是服务器 C是客户机,当然这种方式肯定有得改进,但至少它能工作。
   
S-->C时间同步第 4001 帧,数据大小100
S-->C数据1
C-->S数据更新完毕
S-->时间同步第 4002 帧,数据大小50
S-->C数据2
C->S数据更新完毕

当然,上面写得过于简单了,其实在服务器发送同步帧之前,应该先把所有客户端在下一帧的改变数据先收集起来,然后再发送同步帧一次进行同步。

说白了网络功能的实现其实就是做了两件事:
1.由服务器产生时钟,而不是由本地机器产生时钟。
2.各客户端的输入数据由改由网络接收,而不是直接由键盘接收。

内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:2006_06_26
举报原因:
原因补充:

(最多只允许输入30个字)