2D網路遊戲開發(網路篇)(九)

2021-04-08 11:18:42 字數 2778 閱讀 2375

2d網路遊戲開發(網路篇)(九)

前言

轉眼之間,就來到了這一系列教程的第九課來了,事先宣告一下,這些文章大多**於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嘛

…..不關它,先玩了再說。

)遊戲開發欄目,如你需要遊戲開發方面的書籍請參考金橋書城遊戲頻道(

如果你在使用

sdl時有什麼問題,請到金橋科普**(

)遊戲開發欄目,我將詳細地為你解答。

2D網路遊戲開發(網路篇)(二)

2d網路遊戲開發 網路篇 二 在上一章中,我簡單的講解了什麼是raknet,它有那些好處。在這一章中,我們將講解如何在ide中配置raknet,並將測試乙個程式。由於raknet的作者使用的是vc net,所以在作者的主頁上,他詳細地講解了如何在vc net中配置raknet,如果你使用的vc ne...

2D網路遊戲開發(網路篇)(六)

2d網路遊戲開發 網路篇 六 在前面的章節中,我們實現了乙個簡單的聊天室。今天,我們仍然要圍繞這個主題,但採取別的方法,這個方法很有用,應該說是整個網路引擎的關鍵,它就是 rpc remote procedure calls 翻譯成中文就可以理解成 遠端功能呼叫 通常情況下,你傳送乙個資訊,你必須實...

2D遊戲開發(2)

每次給遊戲新增新功能時,通常也會引入一些新設定。為了讓所有的設定進行統一管理,我們可以配置乙個名為 setting的模組,這個模組中包含乙個setting的類,用來儲存所有的設定。usr bin env python3.5 filename setting 儲存所有的設定 class setting...