客戶端:
傳奇的客戶端源**有兩個工程,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...