传奇客户端:传奇源码分析-客户端执行流程

传奇客户端源代码有两个工程WindHorn和Mir2Ex
先剖析下WindHorn工程
1.CWHApp、CWHWindow和CWHDXGraphicWindowWindow窗口创建
CWHApp派生CWHWindowCWHWindow又派生CWHDXGraphicWindowCWHWindow类
中完成窗口注册和创建CWHDXGraphicWindowCWHWindow完成创建窗口功能然后再CreateDXG化DirectX

2.CWHDefProcess派生出CloginProcess、CcharacterProcess、CgameProcess 3个类
这 3个类是客户端处理核心类

3.全局变量:
CWHDXGraphicWindowg_xMainWnd;主窗口类
CLoginProcessg_xLoginProc;登录处理
CCharacterProcessg_xChrSelProc;角色选择处理
CgameProcessg_xGameProc;游戏逻辑处理

4.代码分析:
1.首先从LoginGate.cppWinMain分析:
g_xMainWnd定义为CWHDXGraphicWindowCWHWindow完成创建窗口功能然后
DirectDrawEnumerateEx枚举显示设备(执行回调DXGDriverEnumCallbackEx)再CreateDXG化DirectX(创建DirectDraw对象,取得独占和全屏模式,设置显示模式等)
g_xSound.InitMirSound创建CSound对象
g_xSpriteInfo.SetInfo;
化声音加载Socket库的后进行CWHDefProcess*指针赋值(事件绑定)g_bProcState变量反应了当前游戏状态(登录角色选择游戏逻辑处理)Load些操作(登录角色选择游戏逻辑处理)进行消息循环
_LOGIN_PROC:
g_xLoginProc.RenderScene(dwDelay);
_CHAR_SEL_PROC:
g_xChrSelProc.RenderScene(dwDelay);
_GAME_PROC:
g_xGameProc.RenderScene(dwDelay);
根据g_bProcState变量标志选择显示相应画面

2.接收处理网络消息和接收处理窗口消息
在区别状态下(登录角色选择游戏逻辑处理)接收到消息(网络窗口消息)会分派到区别中处理这里是用虚处理(子类思路方法由实际父类完成相应处理)
OnMessageReceive主要处理网络消息DefMainWndProc则处理窗体消息(按键重绘等)创建窗体类为CWHDXGraphicWindow回调为:
MainWndProc(HWNDhWnd,UINTuMsg,WPARAMwParam,LPARAMlParam) [Page]
(m_pxDefProcess)
m_pxDefProcess->DefMainWndProc(hWnd,uMsg,wParam,lParam);

MainWndProcDXG(hWnd,uMsg,wParam,lParam);

m_pxDefProcess->DefMainWndProc父类实际处理
在WM_PAINT事件里:g_xClientSocket.ConnectToServer连接登陆服务器
Tags: 

延伸阅读

最新评论

发表评论