关闭

2006_06_26

757人阅读 评论(0) 收藏 举报

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

 

游戏分为数据帧与视频帧,数据帧就是游戏时间,视频帧只能更新画面的时机而已。
游戏的时间是以一个游戏的数据帧为基本单位,而这个数据帧的产生就交由一函数来完成,而这函数的时间不一定是系统时间。
那么游戏的内部循环看起来就应该是这样子:
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.各客户端的输入数据由改由网络接收,而不是直接由键盘接收。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:118668次
    • 积分:2185
    • 等级:
    • 排名:第18068名
    • 原创:94篇
    • 转载:2篇
    • 译文:0篇
    • 评论:25条
    最新评论