因为返修的硬盘搞到手了,所以这几天在重装系统,以及把备分在其它地方的数据整理进来。
游戏分为数据帧与视频帧,数据帧就是游戏时间,视频帧只能更新画面的时机而已。
游戏的时间是以一个游戏的数据帧为基本单位,而这个数据帧的产生就交由一函数来完成,而这函数的时间不一定是系统时间。
那么游戏的内部循环看起来就应该是这样子:
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.各客户端的输入数据由改由网络接收,而不是直接由键盘接收。
本文探讨了游戏开发中数据帧与视频帧的概念及其作用,并详细解释了游戏内部循环的工作原理。此外,还介绍了简单的网络同步机制,包括服务器与客户端之间如何进行时间同步和数据更新。

被折叠的 条评论
为什么被折叠?



