傳奇原始碼分析 客戶端 全域性變數與總體執行流程

2021-04-15 16:24:16 字數 1804 閱讀 6449

客戶端:

傳奇的客戶端源**有兩個工程,windhorn和mir2ex。

先剖析一下windhorn工程。

1. 中完成視窗的註冊和建立。cwhdxgraphicwindow呼叫cwhwindow完成建立視窗功能,然後再呼叫createdxg()來初始化directx。 2

.cwhdefprocess派生出cloginprocess、ccharacterprocess、cgameprocess三個類。

這三個類是客戶端處理的核心類。

3. 全域性變數:

cwhdxgraphicwindow    g_xmainwnd;  主視窗類。

cloginprocess         g_xloginproc; 登入處理。

ccharacterprocess     g_xchrselproc; 角色選擇處理。

cgameprocess       g_xgameproc; 遊戲邏輯處理。 4

.**分析:

1.首先從

logingate.cpp winmain分析:

g_xmainwnd定義為

cwhdxgraphicwindow呼叫cwhwindow完成建立視窗功能,然後

呼叫directdrawenumerateex列舉顯示裝置,(執行**函式dxgdriverenumcallbackex) 再呼叫createdxg()來初始化directx(建立directdraw物件,

取得獨佔和全屏模式,

設定顯示模式等)。

g_xsound.initmirsound建立

csound物件。

g_xspriteinfo.setinfo();

初始化聲音,載入socket庫之後,進行cwhdefprocess*指標賦值(事件繫結)。g_bprocstate變數反應了當前遊戲的狀態(登入,角色選擇,遊戲邏輯處理)。呼叫load初始化一些操作(登入,角色選擇,遊戲邏輯處理)。進行訊息迴圈。

case _login_proc:

g_xloginproc.renderscene(dwdelay);

case _char_sel_proc:

g_xchrselproc.renderscene(dwdelay);

case _game_proc:

g_xgameproc.renderscene(dwdelay);

根據g_bprocstate變數標誌,選擇顯示相應的畫面。 2

.接收處理網路訊息和接收處理視窗訊息。

在不同的狀態下(登入,角色選擇,遊戲邏輯處理),接收到的訊息(網路,視窗訊息)會分派到不同的函式中處理的。這裡是用虛函式處理(呼叫子類方法,由實際的父類完成相應的處理)。

onmessagereceive

主要處理網路訊息。defmainwndproc則處理窗體訊息(按鍵,重繪等),建立窗體類為cwhdxgraphicwindow,**函式為:

mainwndproc(hwnd hwnd, uint umsg, wparam wparam, lparam lparam)

if ( m_pxdefprocess )

m_pxdefprocess->defmainwndproc(hwnd, umsg, wparam, lparam);

else   

return mainwndprocdxg(hwnd, umsg, wparam, lparam);

m_pxdefprocess->defmainwndproc

呼叫父類的實際處理。

在wm_paint事件裡: g_xclientsocket.connecttoserver連線登陸伺服器。

傳奇原始碼分析 客戶端 全域性變數與總體執行流程

客戶端 傳奇的客戶端源 有兩個工程,windhorn和mir2ex。先剖析一下windhorn工程。1 中完成視窗的註冊和建立。cwhdxgraphicwindow呼叫cwhwindow完成建立視窗功能,然後再呼叫createdxg 來初始化directx。2 cwhdefprocess派生出clo...

傳奇原始碼分析 客戶端 傳奇2檔案格式分析

傳奇檔案型別格式 一 資料檔案 wix 檔案頭格式 typedef struct tagwixfileimageinfo wiximageinfo,lpwiximageinfo ofs44 0x2c的地方 存放著 0b 00 00 00,高低位轉換後為 0xb轉換十進位制數為11 數量 ofs48 ...

客戶端提交mr job原始碼流程分析

job job.getinstance獲得job物件 job.set 新增configuration等配置引數 job.waitforcomplete 原始碼內部實則呼叫submit 方法 之後jobsubmiter中有個成員cluster cluster中又有個成員proxy 物件,幫助提交到ya...