2D网络游戏开发(网络篇)(九)

2D网络游戏开发(网络篇)(九)
 
作者:akinggw
 
前言
 
转眼之间,就来到了这一系列教程的第九课来了,事先声明一下,这些文章大多来源于raknet的官方网站或者例程。如果你觉得我的文章有地方看不懂,那也请你原谅我,因为我也和你一样,也是重头学习这个函数库。在这种情况下,我还是请你阅读它官方网站上的。
 
比特流简介
 
在上一篇文章中,我们已经讲解了什么是数据包,也涉及到比特流,但一直没有对比特流进行详细地描述。而我们今天在讲解接收数据包之前,先简单地讲解一下比特流。
 
描述
 
bitstream 是名字空间Raknet下的一个类,它的作用就是对动态数组进行打包和解包bitsteam主要有三个优点:
 
1.        动态地建立数据包
2.        压缩
3.        写比特
 
要使用 bitsteam, 你必须首先预定义你的结构,并且把它们转换成 (char*) 形式。依赖与具体内容,你可以选择在运行的时候写数据块。 Bitstream 也可以根据数据包的类型进行压缩。
 
压缩采用下面的方法,比较的简单:
 
1.        上面的一半是否全是 0 1 表示无符号类型)?(译者注:不知道这里是否翻译正确,我也不明白,对不起哦)
 TRUE – 写一个 1
 FALSE - 上面的一半为 0
2 .重复那下面的一半,直到字节的一半
这意味着如果你的数据在它自己最大范围一半的情况下,你将保存比特流。这样你就可以用 WriteCompressed 来代替 Write 和用 ReadCompressed 来代替 Read
 
最后,你可以写比特。但大多数时间,你不会注意到这些。不管怎样,当写 bool 值时,将自动只写一个比特。这对你的数据的加密也很有用。
 
写数据
 
建立一个 bitstream ,然后为你的每个数据类型建立一个写方法。如果你的数据类型是 Raknet 中自带的,那么正确的重载函数将被调用。如果你的数据类型是你自己的类型,那么你必须向下面这样做。
 
BitStream.Write((char*)&myType,sizeof(myType);
 
这是构造函数中的一个带参数的版本。
 
读数据
 
读数据是同样简单。建立一个 bitstream ,然后在构造函数中将它指派给你的数据。
 
BitStream.myBitStream(packet->data,packet->length,false);
 
主要函数
 
构造函数
BitStream(int initialBytesToAllocate);
这个构造函数的作用是决定预先分配多少内存给这个 bitstream
 
构造函数
BitStream(const char* _data, unsigned int lengthInBytes,bool _copyData);
这个版本的构造函数是给 bitstream 一些初始数据。这通常用于将当前数据流解释成 bitstream, 最后一个参数 _copyData 如果为 false ,那么指针将指向当前的数据。如果为 true ,那么你可能想改变数据,想做一个内部的拷贝。
 
写数据函数
写数据函数用于在比特流结尾将数据变换成比特流,你将使用相反的方法 Read 将数读回来。
 
写压缩数据函数
就是将经过压缩后的数据写入 bitstream ,你同样可以使用相反的方法 ReadCompressed 将数据读回来。
 
读数据函数
read 数据函数用于按顺序从比特流中将数据读出来。如果在 bitsteam 中没有数据,就返回 false
 
读压缩数据函数
与前面相同,只不过是对压缩数据进行操作。
 
GetNumberOfBitsUsed
GetNumberOfBytesUsed
得到写入比特流的字节数或比特数。
 
GetData
给你一个指针,指向内部数据。可以让你直接访问数据。
 
Over!
 
结尾语
 
本来还打算讲解一下如何接收数据包,但我好想玩一下 3D 哦,大家就可怜可怜我,让我玩一下 3D ….. 不关它,先玩了再说。
 
关于更多内容请访问金桥科普网站( http://popul.jqcq.com   )游戏开发栏目,如你需要游戏开发方面的书籍请参考金桥书城游戏频道( http://book.jqcq.com/category/1_70_740.html )。 如果你在阅读本篇文章时有什么好的建议请来信给我,我的 E_mail: akinggw@126.com. 如果你在使用 SDL 时有什么问题,请到金桥科普网站( http://popul.jqcq.com   )游戏开发栏目,我将详细地为你解答。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值