传奇源码分析-客户端(全局变量与总体执行流程)

客户端:
传奇的客户端源代码有两个工程,WindHorn和Mir2Ex。
先剖析一下WindHorn工程。
1. CWHApp、CWHWindow和CWHDXGraphicWindow。Window程序窗口的创建。
         CWHApp派生CWHWindow,CWHWindow又派生CWHDXGraphicWindow。CWHWindow类           
中完成窗口的注册和创建。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连接登陆服务器。
 
————————————————
版权声明:本文为CSDN博主「hejishan」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hejishan/article/details/2530367

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本来打算等录完教程在开源,后来发现实在是没时间,怕大家等不及,先开源了再说吧。大家先拿去研究,等我忙完这一阵有时间了录一个流程讲解,方便大家修改源码! 下面大概给大家介绍下服务器客户端的交互流程 服务器线程分类:玩家更新,怪物更新,数据接收,地图更新,数据库,界面更新,网管接收 玩家类里的更新和怪物类里的更新大致一样,是操作攻击是否击中,掉血计算,buff到期时间等不是立即生效的东西都在更新里。 服务器的设计思路比较清楚,所以还未见过内存方面报错(数组越界有可能会有,比如部分玩法,目前不稳定的都关闭了暂时没时间修复,大家可以自己动手) 暂时关闭的不稳定玩法:行会争霸,团战(尚未测试),摆摊,交易系统。 玩家视野我设计的是每个地图格子一个整数数组存放玩家或怪物编号,怪物编号以>0开始,玩家以<0开始,每次移动都会去地图类里取视野 另外服务器上的菜单:刷怪控制、管理这两个尚未测试应该有bug,自己注意修复一下 本服务器设计的非常安全,不会有任何变态挂,加速挂,锁血挂等出现,因为所有计算都是在服务器上完成的,计算效率也是杠杆的 不过有人可能说效率不行呀 cpu太高,带几十个人就卡了。那是因为 易语言 在源码调试下运行本身就会慢5-10倍左右,所以测试性能建议编译后在试试 另外微端的事情我说一下,大家直接把RES资源下载到客户端目录下,然后屏蔽微端连接,就可以了,不需要微端了就,但是需要下载好整个游戏就行了 上一个客户端版本我附带在这里大家可以去下载: https://bbs.125.la/forum.php?mod=viewthreadtid=14496289 讨论易语言游戏制作和发展的 QQ群:336787216 ,欢迎一起携手造就易语言游戏的未来,个人认为易语言写游戏真的很容易。主要是引擎非常效率,引擎用的是凤影龙鸣作者封装的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值