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

原创 2006年06月22日 11:44:00
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  )游戏开发栏目,我将详细地为你解答。
 

相关文章推荐

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

2D网络游戏开发(网络篇)(十) 作者:akinggw 前言 其实,我也很想将游戏开发简单化,可不管我怎么努力,游戏开发还是那么难,还是涉及那么多知识。同样,在这里,我也希望我的翻译和讲解能够让你明白...
  • akinggw
  • akinggw
  • 2006年06月22日 11:45
  • 1295

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

2D网络游戏开发(网络篇)(四) 作者:akinggw 在上一篇中,我们只是讲解了如何建立一个服务器或客户端。这一篇中,我们将讲解客户端如何和服务器进行连接。 #include "stdio.h" /...
  • akinggw
  • akinggw
  • 2006年06月22日 11:36
  • 1601

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

2D网络游戏开发(网络篇)(一) 来源: ChinaUnix博客  日期: 2006.05.26 11:16 (共有0条评论) 我要评论 作者:akinggw“2D网游开发”,我有时都觉得这个标题包含...

cocos2d-x商业级单机游戏和网络游戏开发系列

引言 接触coco2d-x已经一年多了,期间陆陆续续开发了很多的游戏,包括单机的小游戏和网络卡牌游戏。cocos2d-x是一个快速发展的引擎,除了经常的主引擎的更新之外,社区内也经常涌现出新的插件,...

3D网络游戏开发实践

  • 2010年05月26日 10:50
  • 182KB
  • 下载

Unity3D游戏开发之网络游戏服务器架构设计培训(如何做一名主程)

如何做一名好主程

Android网络游戏开发实战.part2

  • 2017年06月08日 12:56
  • 54.3MB
  • 下载

FSM:网络游戏开发中的有限状态机(实践篇)

上一篇文章《FSM:网络游戏开发中的有限状态机(理论篇)》中,讲解了FSM的基础知识。这里,我结合图形及具体例子,讲解下FSM在实际开发中的运用。 首先,图解下上篇文章中提到的各种action。 1....

cocos2d-x 开发网络游戏(http post&socket)

猴子原创,欢迎转载。转载请注明: 转载自Cocos2D开发网--Cocos2Dev.com,谢谢! 原文地址: http://www.cocos2dev.com/?p=274 最近开发...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:2D网络游戏开发(网络篇)(九)
举报原因:
原因补充:

(最多只允许输入30个字)