摘要: 如果你打算拿HL的源码(也就是HLSDK)来改出一个自己的游戏,那你就非常有必要理解一些HL引擎的工作方式。 HL引擎分成两个部分,服务端和客户端。服务端管理所有玩家的状态和游戏规则,客户端负责显示UI和特效…之类的。 我们一般不对引擎本身(hw.dll sw.dll swds.dll)做什么手脚, 阅读全文
posted @ 2017-05-20 07:02 Akatsuki- 阅读(1724) 评论(0) 推荐(0) 编辑
摘要: 我们来了解一下引擎是怎么管理实体的吧!我们这里就说说服务端的实体(edict_t) 服务端用 edict_t 这个结构体来保存一个实体,可以说一个 edict_t 就是一个 服务端实体,下文简称实体。 我们在 mp.dll 的源码里经常看到的那些 CBaseXXX 又和 edict_t 有什么关系呢 阅读全文
posted @ 2017-05-20 06:42 Akatsuki- 阅读(636) 评论(0) 推荐(0) 编辑
摘要: 服务端和客户端总是需要互相交换数据,来做到实时的游戏体验。 很久之前,我们的网速都不是很快,甚至带宽只有 1Mbps (128KB/s)这样的速度,作为当时一个网络实时对战游戏,每时每刻都要传递数据,为了完成各种各样复杂的效果,要传递的数据量自然也就多了。 为了减少需要发送的数据大小,引擎的程序员开 阅读全文
posted @ 2017-05-20 05:54 Akatsuki- 阅读(1468) 评论(0) 推荐(0) 编辑
摘要: 服务端会给客户端发送一些数据,其中两大种类数据是 clientdata_t 和 entity_state_t 这里我们说说 entity_state_t 这个结构体。 你在丢在地上的枪、C4等等是服务端实体(edict_t),并且你能在客户端看到它们(废话),这些实体们是怎样发送到你的客户端的呢? 阅读全文
posted @ 2017-05-20 05:05 Akatsuki- 阅读(751) 评论(0) 推荐(0) 编辑
摘要: 首先说明下,这个函数是写在 mp.dll 里的。 服务器会给每个客户端发送一些数据,其中两大数据种类就是 clientdata_t 和 entity_state_t 这里要说的是 clientdata_t 这个结构。 结构体 clientdata_t 是服务器发送给玩家的客户端的一组数据,每个玩家的 阅读全文
posted @ 2017-05-20 04:31 Akatsuki- 阅读(751) 评论(0) 推荐(0) 编辑
摘要: 你平常肯定接触到很多比如 info_player_start hostage info_target 之类的实体,这里就解释一下怎么创建一种新的实体。 首先建立一个新的 .h 文件(当然你写在现有的文件上也可以),建立一个基于 CBaseEntity 的类,例如: 在 .cpp 文件里编写这个类的函 阅读全文
posted @ 2017-05-20 03:46 Akatsuki- 阅读(597) 评论(0) 推荐(0) 编辑