跳轉到內容

BlitzMax/模組/網路/GameNet

來自Wikibooks,開放世界中的開放書籍

GameNet模組(簡稱GNet)提供了一組用於建立和管理多人網路遊戲的命令。

GNet的工作方式與其他網路庫略有不同。GNet不是主要基於“訊息”,而是透過在網路上同步GNet物件的集合來工作的。

每個GNet物件包含32個&插槽,其性質類似於BlitzMax物件的欄位。您可以使用SetGNetIntSetGNetFloatSetGNetString命令寫入這些插槽,並使用GetGNetIntGetGNetFloatGetGNetString命令讀取這些插槽。這些插槽中包含的資料的實際含義完全由您決定,但通常包括諸如玩家位置、得分、生命值等資訊。

請注意,您只能修改自己建立的GNet物件。此類物件稱為本地物件,而其他地方建立的物件稱為遠端物件。

要開始使用GNet,您必須首先使用CreateGNetHost命令建立一個GNet主機。建立主機後,您可以使用GNetConnect連線到其他GNet主機,或使用GNetListen準備接受來自其他主機的連線。

GNetSync命令使所有GNet物件保持最新狀態。這包括通知其他主機您對本地GNet物件所做的任何修改,以及處理來自其他主機關於遠端GNet物件任何修改的通知。

GNetSync之後,您可以使用GnetObjects命令檢查哪些物件已被修改、建立或關閉。這將返回一個處於特定狀態的GNet物件的連結列表。

GNet還提供了一個簡單的訊息系統。GNet訊息實際上只是一種特殊的GNet物件,因此您可以使用標準的GNet命令來寫入插槽以初始化訊息。建立並初始化後,可以使用SendGNetMessage命令將訊息傳送到遠端物件。

GNetSync之後,可以使用GNetMessages命令處理傳入的訊息。此函式返回一個訊息物件的連結列表,可以使用標準的GNet命令讀取插槽來檢查這些物件。此外,可以使用GNetMessageObject命令確定訊息的目標本地物件。

CreateGNetHost

[編輯 | 編輯原始碼]

函式 CreateGNetHost:TGNetHost()

描述:建立GNet主機

返回值:一個新的GNet主機

資訊:建立GNet主機後,可以使用它透過CreateGNetObject建立物件,透過GNetConnect連線到其他主機,並透過GNetListen偵聽來自其他主機的連線。

CloseGNetHost

[編輯 | 編輯原始碼]

函式 CloseGNetHost( host:TGNetHost )

描述:關閉GNet主機

資訊:關閉後,無法重新開啟GNet主機。

函式 GNetSync( host:TGNetHost )

描述:同步GNet主機

資訊GNetSync將更新所有GNet物件的狀態。使用此命令後,使用GNetObjects函式確定哪些物件已遠端建立、修改或關閉。

GNetListen

[編輯 | 編輯原始碼]

函式 GNetListen( host:TGNetHost,port )

描述:偵聽連線

返回值:如果成功,則返回True,否則返回false

資訊:使主機開始偵聽指定上的連線嘗試。主機開始偵聽後,其他機器上的主機可以使用GNetConnect連線。

GNetListen可能會失敗,如果已被其他應用程式使用,或者主機已經在偵聽或已使用GNetConnect連線到遠端主機。

GNetConnect

[編輯 | 編輯原始碼]

函式 GNetConnect( host:TGNetHost,address$,port,timeout_ms=10000 )

描述:連線到遠端GNet主機

返回值:如果連線成功,則返回True,否則返回false

資訊:嘗試將主機連線到指定的遠端地址和埠。

指定的地址和埠必須有一個GNet主機在偵聽(參見GNetListen),連線才能成功。

GNetObjects

[編輯 | 編輯原始碼]

函式 GNetObjects:TList( host:TGNetHost,state=GNET_ALL )

描述:獲取GNet物件的列表

返回值:一個連結列表

資訊GNetObjects返回處於特定狀態的GNet物件的列表。

state引數控制列出哪些物件,可以是&GNET_ALL、&GNET_CREATED、&GNET_MODIFIED或&GNET_CLOSED之一。

請注意,除了&GNET_ALL之外,返回的列表將始終僅包含遠端物件。

GNetMessages

[編輯 | 編輯原始碼]

函式 GNetMessages:TList( host:TGNetHost )

描述:獲取傳送到本地物件的GNet訊息列表

返回值:一個連結列表

CreateGNetObject

[編輯 | 編輯原始碼]

函式 CreateGNetObject:TGNetObject( host:TGNetHost )

描述:建立一個GNet物件

返回值:一個新的GNet物件

CreateGNetMessage

[編輯 | 編輯原始碼]

函式 CreateGNetMessage:TGNetObject( host:TGNetHost )

描述:建立一個GNet訊息物件

返回值:一個新的GNet物件

SendGNetMessage

[編輯 | 編輯原始碼]

Function SendGNetMessage( msg:TGNetObject,toObject:TGNetObject )

描述: 向遠端物件傳送 GNet 訊息

GNetMessageObject

[編輯 | 編輯原始碼]

Function GNetMessageObject:TGNetObject( msg:TGNetObject )

描述: 獲取訊息目標物件

返回值: msg 傳送到的物件

GNetObjectState

[編輯 | 編輯原始碼]

Function GNetObjectState( obj:TGNetObject )

描述: 獲取 GNet 物件的狀態

返回值: 一個整數狀態

資訊: 返回值可以是以下之一

物件狀態含義
GNET_CREATED物件已建立
GNET_SYNCED物件已同步
GNET_MODIFIED物件已被修改
GNET_CLOSED物件已被關閉
GNET_ZOMBIE物件是殭屍物件
GNET_MESSAGE物件是訊息物件

殭屍物件是指已成功關閉並且 GameNet 將不再使用的物件。因此,此類物件將永遠不會出現在 GNetObjects 函式返回的任何列表中。

GNetObjectLocal

[編輯 | 編輯原始碼]

Function GNetObjectLocal( obj:TGNetObject )

描述: 判斷 GNet 物件是否為本地物件

返回值: 如果物件是本地物件則返回 True

GNetObjectRemote

[編輯 | 編輯原始碼]

Function GNetObjectRemote( obj:TGNetObject )

描述: 判斷 GNet 物件是否為遠端物件

返回值: 如果物件是遠端物件則返回 True

SetGNetInt

[編輯 | 編輯原始碼]

Function SetGNetInt( obj:TGNetObject,index,value )

描述: 設定 GNet 物件的整數資料

SetGNetFloat

[編輯 | 編輯原始碼]

Function SetGNetFloat( obj:TGNetObject,index,value# )

描述: 設定 GNet 物件的浮點數資料

SetGNetString

[編輯 | 編輯原始碼]

Function SetGNetString( obj:TGNetObject,index,value$ )

描述: 設定 GNet 物件的字串資料

GetGNetInt

[編輯 | 編輯原始碼]

Function GetGNetInt( obj:TGNetObject,index )

描述: 獲取 GNet 物件的整數資料

GetGNetFloat

[編輯 | 編輯原始碼]

Function GetGNetFloat#( obj:TGNetObject,index )

描述: 獲取 GNet 物件的浮點數資料

GetGNetString

[編輯 | 編輯原始碼]

Function GetGNetString$( obj:TGNetObject,index )

描述: 獲取 GNet 物件的字串資料

SetGNetTarget

[編輯 | 編輯原始碼]

Function SetGNetTarget( obj:TGNetObject,target:Object )

描述: 設定 GNet 物件的目標物件

資訊: 此命令允許您將任意物件繫結到 GNet 物件。

GetGNetTarget

[編輯 | 編輯原始碼]

Function GetGNetTarget:Object( obj:TGNetObject )

描述: 獲取 GNet 物件的目標物件

返回值: 當前繫結的目標物件

CloseGNetObject

[編輯 | 編輯原始碼]

Function CloseGNetObject( obj:TGNetObject )

描述: 關閉 GNet 物件

華夏公益教科書