关闭

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

1480人阅读 评论(0) 收藏 举报
2D网络游戏开发(网络篇)(九)
 
作者:akinggw
 
前言
 
转眼之间,就来到了这一系列教程的第九课来了,事先声明一下,这些文章大多来源于raknet的官方网站或者例程。如果你觉得我的文章有地方看不懂,那也请你原谅我,因为我也和你一样,也是重头学习这个函数库。在这种情况下,我还是请你阅读它官方网站上的。
 
比特流简介
 
在上一篇文章中,我们已经讲解了什么是数据包,也涉及到比特流,但一直没有对比特流进行详细地描述。而我们今天在讲解接收数据包之前,先简单地讲解一下比特流。
 
描述
 
bitstream 是名字空间Raknet下的一个类,它的作用就是对动态数组进行打包和解包bitsteam主要有三个优点:
 
1.        动态地建立数据包
2.        压缩
3.        写比特
 
要使用bitsteam,你必须首先预定义你的结构,并且把它们转换成(char*)形式。依赖与具体内容,你可以选择在运行的时候写数据块。Bitstream也可以根据数据包的类型进行压缩。
 
压缩采用下面的方法,比较的简单:
 
1.        上面的一半是否全是01表示无符号类型)?(译者注:不知道这里是否翻译正确,我也不明白,对不起哦)
 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  )游戏开发栏目,我将详细地为你解答。
 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:43779次
    • 积分:663
    • 等级:
    • 排名:千里之外
    • 原创:22篇
    • 转载:0篇
    • 译文:0篇
    • 评论:6条
    文章分类
    最新评论