游戏乐悠悠网游开发网

标题: 武侠世界客户端源代码阅读笔记一【入口函数 [打印本页]

作者: tianyalanzi    时间: 2012-2-25 21:07
标题: 武侠世界客户端源代码阅读笔记一【入口函数
文件: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
}

作者: 帝鱼    时间: 2012-7-30 00:14
厉害,研究的很全面,佩服
作者: sigmls    时间: 2012-12-4 14:54
这个需要顶,貌似这个研究挺多的。




欢迎光临 游戏乐悠悠网游开发网 (http://bbs.yxlyy.club/) Powered by Discuz! X3.2