游戏乐悠悠网游开发网

 找回密码
 立即注册
查看: 1502|回复: 2
打印 上一主题 下一主题

武侠世界客户端源代码阅读笔记一【入口函数

[复制链接]
  • TA的每日心情
    无聊
    2014-8-8 12:31
  • 签到天数: 37 天

    [LV.5]常住居民I

    鲜花(0) 鸡蛋(0)
    跳转到指定楼层
    楼主
    发表于 2012-2-25 21:07:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    文件:WXClient\WXClient.cpp

    客户端的入口函数如下,它只是对_tMain_With_CPPException的包装,并进行了异常处理,实际的工作都在_tMain_With_CPPException中完成。

    ) ?1 o2 C$ l0 U5 T! `
    INT APIENTRY _tWinMain(HINSTANCE hInstance,( c' u$ V# o% K/ h3 I* F
    HINSTANCE hPrevInstance,( i6 A$ }1 Q4 u4 a0 [
    LPTSTR lpCmdLine,
    INT nCmdShow)
    {% N# |; t5 J  g/ \% s1 O2 Y
    //进入结构化异常块

    __try , h* \: c3 T- a, ?( R3 e+ R/ q
    {" ~0 t5 M; L+ \3 b# K
    return _tMain_With_CPPException(hInstance, hPrevInstance, lpCmdLine, nCmdShow);1 H& b5 y7 t" \/ p' k. B# q
    }; {" i* A" o7 c, u5 S) m/ d
    __except (tProcessException(GetExceptionInformation(), true), TerminateProcess(GetCurrentProcess(), 0), EXCEPTION_EXECUTE_HANDLER) {}
    //进程退出' g) u+ n/ B9 j

    return 0;
    }
    _tMain_With_CPPException主要做了以下几项工作:
    1.保存全局句柄以供以后使用。" y9 P3 @$ c" q. z* `
    2.处理命令行参数。3 w% c( J6 Q2 H2 F  w
    3.初始化游戏重要的静态变量。
    4.设定游戏循环逻辑为登陆循环,并执行循环。
    5.最后在退出游戏循环后清理静态变量。
    这里面最重要的是第4步,是整个游戏运行的核心。设计者把游戏运行过程分了1.选择服务器 2 登陆 3角色创建 4.角色选择 5进入6 游戏这六个过程。1-5步是玩家在可以开始正式打怪做任务等(进入游戏主循环)之前必须的准备过程,首先你要选择服务器,然后输入帐号密码登陆到选择的服务器,如果是第一次还要先创建角色,然后选择角色,最后进入到游戏主循环。CGameProcedure抽象了整个游戏过程,并通过SetActiveProc实现各个不同过程之间的切换。CGameProcedure::MainLoop()是以上各个过程的挂接点。MainLoop执行的实际是SetActiveProc设定的当前活动过程的逻辑循环。_tMain_With_CPPException中把当前活动的过程设定为login即登陆

    # q5 x# C( F% [& Y3 ^" P
    INT _tMain_With_CPPException(HINSTANCE hInstance,+ M# o6 \7 f& f4 n
    HINSTANCE hPrevInstance,
    LPTSTR lpCmdLine,: l% ]% T' E' j
    INT nCmdShow)
    {
    //进入C++异常处理块# I' M9 S# x* m9 G" }

    //try, o" f2 ?; D5 {) B4 ^% g7 A! f

    {  _0 W* B2 R' o6 t, W
    " o( `9 w, r) |+ q! M% B+ h
    m  C/ ^8 O; g1 J  R+ |
    //保存全局句柄
    ) d" F' w* l( o/ ]& `
    g_hInstance = hInstance;9 F! j: o5 D  }) H1 E+ p

    ! N, A: O3 O; ]9 o
    //检测命令行" M7 l4 M8 K) Q4 [! K
    : J0 G" {9 e/ O" v
    ( M# K& e' G* w
    #ifndef _FINAL  ^0 u  k4 |4 w9 E
    ProcessCmdLine(lpCmdLine);
    #endif+ n7 A% u, ~3 R1 D8 \" `+ ^
    % `1 L2 }" \" \
    //===========================; U) W4 U# d9 d: D4 O% m4 r: F
    - w6 X6 s( M4 i" }, S! I
    //初始化游戏循环静态变量. u6 Y$ O2 q% X7 a) g- {. _- G

    CGameProcedure::InitStaticMemeber();

    //===========================5 E% a7 a; K- ^* J, ]5 j

    //将登录循环设为游戏主循环
    8 v; H9 U9 {2 ~$ W0 n  C
    CGameProcedure::SetActiveProc((CGameProcedure*)CGameProcedure::s_pProcLogIn);
    : {9 Q2 y; a9 ?# ]0 e
    //===========================( I( w5 r0 |, B0 h) Y4 {! j

    //进入主循环

    CGameProcedure::MainLoop();* p, f, W  ~. K" Y  n/ ~, {
    9 t4 ^! ~5 \, `6 V
    : F: b8 b8 P+ \2 Z5 d5 Y
    //释放游戏循环静态变量
    : d  O" [( I) X& a8 R8 i
    CGameProcedure::ReleaseStaticMember();  E3 o- Y; k4 r- I3 Z9 y1 ~
    }$ x( m' E3 k& V8 a9 y
    //catch(ce起玩过滤词t std::exception& e)

    // //转化为结构化异常; o. Q6 s% S. I/ ?* Q

    // (Ce起玩过滤词T ULONG_PTR *)&pException); // 指向静态异常内存7 ^! \9 C6 x+ L+ L8 k( O
    5


    return 0;& j* c8 C6 _6 b% O. O
    }
  • TA的每日心情

    2023-12-26 14:33
  • 签到天数: 222 天

    [LV.7]常住居民III

    鲜花(0) 鸡蛋(1)
    沙发
    发表于 2012-7-30 00:14:33 | 只看该作者
    厉害,研究的很全面,佩服
  • TA的每日心情

    2014-3-4 15:28
  • 签到天数: 36 天

    [LV.5]常住居民I

    鲜花(0) 鸡蛋(0)
    板凳
    发表于 2012-12-4 14:54:45 | 只看该作者
    这个需要顶,貌似这个研究挺多的。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    小黑屋|手机版|Archiver|Online Game Xingbarking Dev Team  

    GMT+8, 2024-5-10 10:13 , Processed in 0.140247 second(s), 35 queries .

    Powered by Discuz! X3.2 Licensed

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表