❶ 链変简浼犲囨簮镰佸彲浠ュ湪链嶅姟鍣ㄤ笂鐢ㄥ悧
鍙浠ャ备紶濂囨簮镰佸寘钖浜嗘父鎴忕殑锘烘湰鏋舵瀯鍜岃勫垯锛屼互鍙婃墍链夌墿鍝併佹鐗┿佸湴锲惧拰瑙掕壊镄勫睘镐у拰鏁版嵁绛夛纴鍙浠ョ敤鍦ㄦ湇锷″櫒涓婏纴鏀鎸佽繛鎺ュ埌链嶅姟鍣ㄣ傛湇锷″櫒鏄涓绉岖$悊璧勬簮骞朵负鐢ㄦ埛鎻愪緵链嶅姟镄勮$畻链鸿惧囥
❷ 传奇 原码 是什么东西 有什么作用 是多少
传奇的客户端源代码有两个工程,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) [Page]
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连接登陆服务器。
❸ 谁能告诉我传奇源码是多少
传奇源码分析-序言
简述:
最近对高性能的服务器比较感兴趣,读过了DELPHI的Socker源码WebService及RemObject之后,高性能的服务器感兴趣。
你可能需要的以下知识才能更好的读懂一个商业源码:
1).SOCKET的I/O模型熟悉掌握。
2).面向对象技术的熟悉掌握。
3).Socket的API掌握。
4).多线程技术等。
5).一门熟悉的开发工具掌握,和多种语言的源码阅读能力。
我下的源码 LegendOfMir2_Server:共包含AdminCmd, DBSrv, GameGate, GameSvr,LoginGate, LoginSvr, SelGate七个工程文件。传奇的客户端源代码有两个工程,WindHorn和Mir2Ex。
我分析的, 主要是VC SQL版本的, DELPHI翎风源码不做分析, 另外下载了乐都WIL编辑器和乐都MPA地图编辑器这些工具.
传奇源码分析-客户端(WindHorn简述和传奇文件格式分析)
DirectX类库分析(WindHorn):
1. RegHandler.cpp 注册表访问(读写)。
2. CWHApp派生CWHWindow,CWHWindow完成窗口的注册和创建。CWHWindow派生出CWHDXGraphicWindow,CWHDXGraphicWindow调用CWHWindow完成创建窗口功能,然后再调用CreateDXG()来初始化DirectX。
3. WHDefProcess.cpp在构造函数中获得CWHDXGraphicWindow句柄。
Clear函数中调用在后台缓存上进行绘图操作,换页至屏幕。
ShowStatus函数,显示状态信息。
DefMainWndProc函数,调用CWHDXGraphicWindow->MainWndProcDXG消息处理。
4. WHImage.cpp图象处理。加载位图,位图转换。优化处理。
5. WHSurface.cpp 主页面处理。
6. WHWilTexture.cpp 材质渲染。
WILTextureContainer: WIL容器类。m_pNext指向下一个WILTextureContainer,单链表。
7. WHWilImage.cpp 从Data目录中加载Wix文件(内存映射)。
8. WHDXGraphic.cpp 处理DirectX效果。
文件类型格式探讨:
Wix文件:索引文件,根据索引查找到相应数据地址(数据文件)。
// WIX 文件头格式
typedef struct tagWIXFILEIMAGEINFO
{
CHAR szTmp[40]; // 库文件标题 'WEMADE Entertainment inc.' WIL文件头
INT nIndexCount; // 图片数量
INT* pnPosition; // 位置
}WIXIMAGEINFO, *LPWIXIMAGEINFO;
我们下载一个Hedit编辑器打开一个Wil文件,分析一下。我们发现Wix文件中,0x23地址(含该地址)以前的内容是都相同的,即为:#INDX v1.0-WEMADE Entertainment inc.
Ofs44 0x2C的地方:存放着0B 00 00 00,高低位转换后为:0xB转换十进制数为11(图片数量)Ofs48 0x30的地方:存放着38 04 00 00,高低位转换后为:0x438 = 1080, 这个就是图象数据的开始位置。
我们用Wil编辑打开对应的Wil文件,发现,果然有11张图片。另外我们发现,在Ofs = 44 -47之间的数据总是38 04 00 00,终于明白,所有的图片起始位置是相同的。
Wil文件: 数据文件。
前面我们说了图象数据的开始位置为0x438 = 1080, 1080中有文件开头的44字节都是相同的。所以,就是说有另外的1036字节是另有用途。1036中有1024是一个256色的调色板。
我们看到图片位置数据为: 20 03 58 02, 转化为十六进制: 0x320, 0x258 刚好就是800*600大小的图片。07 00 D4 FF。图片起始位置为:
Ofs 1088: 0x440 图片大小为480000
起始位置:0x440 1088 终止位置:0x7573F 481087 为了验证数据是否正确,我们通过Wil工具,把第一幅图片导出来,然后用Hedit编辑器打开,经过对比,我们发现,数据一致。大小一致。
第二张BMP图片(图片起始位置:0x436 10078) : F0 01 69 01 , 07 00 D4 FF
刚好大小。第二张Wil起始位置:Ofs:481096 0x75748
知道了图片格式,我们可以写一个抓图片格式的程序了。
传奇源码分析-客户端(全局变量与总体执行流程)
客户端:
传奇的客户端源代码有两个工程,WindHorn和Mir2Ex。
❹ 易语言如何制作3D游戏,快点.或者源码,可以修改的.后给分了.手头紧.
3D游戏:小优传奇之哆啦A梦版,源码太长了……去网络搜索易语言3D游戏就可以找到,至少3W字我可以提供其中的代码,如果你要制作游戏的话40M要一个月半多,我支持你,但是要引擎才能启动
.版本 2
.子程序 Draw
.局部变量 i
.局部变量 Colort, 小数型
.局部变量 F1, 小数型
.局部变量 F2, 小数型
表面渲染1.开始渲染 ()
' //////////////////////////////////////////////////////
天空.渲染 () ' 渲染大气
天空.雾启用 (真)
' //////////////////////////////////////////////////////
.如果真 (地图信息.HeightX ≠ 0)
地形.渲染 () ' 渲染地面
.如果真结束
' //////////////////////////////////////////////////////
' 渲染背景模型
.如果真 (地图信息.MeshNum > 0)
.计次循环首 (地图信息.MeshNum, i)
.如果真 (TempMesh [i].Over = 假 且 TempMesh [i].Kind ≠ 2)
模型 [i].渲染 ()
.如果真结束
.计次循环尾 ()
.如果真结束
' //////////////////////////////////////////////////////
' //////////////////////////////////////////////////////
' 绘制人物部分
.如果真 (是否开动态阴影)
场景.完成渲染阴影 () ' 绘制阴影
.如果真结束
Npc [1].Body.渲染 (假)
.变量循环首 (2, 地图信息.NpcNum + 1, 1, i)
.如果真 (Npc [i].Enable 且 Npc [i].Kind ≠ 6)
Colort = 1 - Npc [i].ActNum1 ÷ 5000
.如果真 (Colort > 1)
Colort = 1
.如果真结束
.如果真 (Colort < 0)
Colort = 0
.如果真结束
.如果真 (Npc [i].State = 4)
材质.设置不透明 (正常, Colort)
.如果真结束
Npc [i].Body.渲染 (假)
.如果真 (Npc [i].State = 4)
材质.设置不透明 (正常, 1)
.如果真结束
.如果真结束
.变量循环尾 ()
法杖 [当前法杖 + 1].渲染 (假)
' If IfPart Then GE.DrawGlow '绘制武器发光
' //////////////////////////////////////////////////////
' //////////////////////////////////////////////////////
' //////////////////////////////////////////////////////
' 绘制minimesh
.如果真 (水R.是否启用 ())
水R.渲染 ()
.如果真结束
.如果真 (地图信息.MiniNum > 0)
.计次循环首 (地图信息.MiniNum, i)
.如果真 (临时迷你模型 [i].Num ≠ 0)
迷你模型 [i].渲染 ()
.如果真结束
.计次循环尾 ()
.如果真结束
.如果真 (ModelActor [14].是否启用 ())
ModelActor [14].渲染 (真)
.如果真结束
.如果真 (ModelActor [15].是否启用 ())
ModelActor [15].渲染 (真)
.如果真结束
天空.雾启用 (假)
' 绘制前景透明模型
.如果真 (地图信息.MeshNum > 0)
.计次循环首 (地图信息.MeshNum, i)
.如果真 (TempMesh [i].Over)
模型 [i].渲染 ()
.如果真结束
.计次循环尾 ()
.如果真结束
' //////////////////////////////////////////////////////
.如果真 (水.是否启用 ())
水.渲染 () ' 绘制水面
.如果真结束
' //////////////////////////////////////////////////////
.计次循环首 (地图信息.NpcNum + 1, i)
.如果真 (Npc [i].Shadow.是否启用 () 且 是否开动态阴影 = 假)
Npc [i].Shadow.渲染 () ' 绘制影子
.如果真结束
.如果真 (Npc [i].Emotion > 0)
Npc [i].EmotionM.渲染 ()
Npc [i].Emotion = Npc [i].Emotion - 持续时间
.如果真结束
.计次循环尾 ()
' //////////////////////////////////////////////////////
.如果真 (法杖轨迹特效.是否启用 ())
法杖轨迹特效.渲染 ()
.如果真结束
.计次循环首 (#EffectAnimMax + 1, i)
.如果真 (EffectAnim [i].Enable)
EffectAnim [i].Body.渲染 (真)
.如果真结束
.计次循环尾 ()
.如果真 (是否开粒子)
场景.渲染全部粒子系统 (真) ' 绘制粒子
.如果真结束
屏幕画图.画3D矩形 (Vecc [1], Vecc [2], -1)
表面渲染1.结束渲染 ()
' //////////////////////////////////////////////////////
' //////////////////////////////////////////////////////
' //////////////////////////////////////////////////////
' //////////////////////////////////////////////////////
.如果真 (是否全屏泛光)
.如果 (是否模糊)
特效.设置辉光参数 (创建E颜色 (1, 1, 1, 1), 泛光 × 0.1, 柔化)
.否则
特效.设置辉光参数 (创建E颜色 (1, 1, 1, 1), 泛光, 柔化)
.如果结束
辉光表面渲染.BLT表面渲染 (表面渲染1)
特效.更新辉光 ()
.如果真结束
' //////////////////////////////////////////////////////
' 最终画面
引擎.清屏 (是否模糊) ' 清屏
.如果 (是否全屏泛光)
GammaA = 0.5
.否则
GammaA = 1
.如果结束
.如果真 (是否模糊)
GammaA = GammaA × 0.2
.如果真结束
屏幕画图.开始2D绘制 ()
屏幕画图.画纹理 (表面渲染1.取纹理索引 (), 0, 0, 屏幕宽度, 屏幕高度, RGBA (GammaR, GammaG, GammaB, GammaA)) ' 渲染主画面
.如果真 (切换屏幕计数器 > 0)
切换屏幕计数器 = 切换屏幕计数器 + 持续时间
.如果真 (切换屏幕计数器 > 1500)
切换屏幕计数器 = 1500
.如果真结束
.如果 (是否全屏泛光)
屏幕画图.画纹理 (RS2.取纹理索引 (), 0, 0, 屏幕宽度, 屏幕高度, RGBA (GammaR, GammaG, GammaB, (1 - 切换屏幕计数器 ÷ 1500) × 0.5))
.否则
屏幕画图.画纹理 (RS2.取纹理索引 (), 0, 0, 屏幕宽度, 屏幕高度, RGBA (GammaR, GammaG, GammaB, 1 - 切换屏幕计数器 ÷ 1500))
.如果结束
.如果真 (切换屏幕计数器 = 1500)
❺ 锏芥棩闂ㄤ紶濂囨坠娓告簮镰佸备綍涓嬭浇
涓嬭浇鍦板潃锛http://www.37moyu.com/azyx/jsby/juezhanrimenh5shouyouv093.html
绫诲瀷锛氩畨鍗撴父鎴-瑙掕壊镓婕
鐗堟湰锛氩喅鎴樼槠镞ラ棬h5镓嬫父v0.9.3
澶у皬锛269.40M
璇瑷锛氢腑鏂
骞冲彴锛氩畨鍗揂PK
鎺ㄨ崘鏄熺骇锛堣瘎鍒嗭级锛气槄钸呪槄钸呪槄
娓告垙镙囩: 鍐虫垬锏芥棩闂 浼犲囨坠娓 鍐虫垬锏芥棩闂╤5鍦ㄧ嚎鐜╂坠娓鏄鍒涗綔钥呬滑浠ュ叏鏂扮殑寮曟搸鎶链镓绮惧绩镓挞犵殑涓娆惧睁榫欎紶濂囨父鎴忥纴娓告垙鍜屾垜浠甯哥帺镄勭娓稿唴瀹瑰苟镞犲お澶х殑鍖哄埆锛屽彧鏄杩欓噷镄勭敾璐ㄦ洿涓烘竻鏅帮纴鐜╁朵滑镎崭綔璧锋潵涔熶细镟村姞娴佺晠锛岃缮链変笓灞炵ぜ鍖呭彲浠ョ洿鎺ラ嗗彇鍝︼纴锽沧㈢殑链嫔弸灏辫锋潵澧ㄩ奔涓嬭浇绔椤畨瑁呬綋楠屽惂锛
鍐虫垬锏芥棩闂╤5瀹樻柟鐗堟父鎴忎粙缁 3d娆′笘浠g骇榄斿够鐗硅壊mmo銆婂喅鎴樼槠镞ラ棬銆嬬珛浣撴柊鐢熺橱鍦猴纴娓告垙𨰾ユ湁骞块様瀹忎纻绔嬩綋鍦板浘锛屽叏瑙呜3d镊鐢辨帰绱锛岄瓟骞诲寲瑙掕壊璁╃粡鍏哥珛浣挞潻鏂帮纴锷犱笂绮捐嚧涓镐у寲澶栬傛祦鍏夎呭囧拰椴沧椿镄勬垬鏂椾竾浜哄悓链岖湡瀹炴儏涔夛纴杩椤氨鏄銆婂喅鎴樼槠镞ラ棬銆嫔甫缁欎綘椤剁骇mmo镄勫够𨱍炽
娓告垙鐗硅壊 銆愰泦𨱒镐鐗 𨰾嶅崠鍒嗙孩銆?
婵𨱍呮墦鏂楋纴閰风偒鎶鑳斤纴浣犳兂瑕佺殑锛岃繖閲岄兘鑳界粰浣狅紒闆嗘潃boss锛屾媿鍗栧垎绾锛屽彧瑕佸嚭锷涳纴灏辨湁锲炴姤銆
銆愮儹琛pk 婵𨱍呮寚鎸ャ?
涓板瘜镄刾ve娲诲姩涔愯叮镞犵┓锛氩叏鏂板坛链銆侀噹澶朾oss銆佷釜浜篵oss鎸戞垬璁╀綘褰诲滀笉鐪犮傝法链嶅ぇ鎴樿╀綘棰嗙暐澶氱嶅ぉ璧嫔拰鎴樻湳鎼閰岖殑缁勫悎濂ュ欙绂鎴桦満浼欎即鐩搁殢镄勫厔寮熶箣𨱍呫傚姪浣犲害杩囬毦蹇樼殑闱掍簯镞跺厜銆
銆愬崈浜烘縺鎴 鍐宠儨宸呭嘲銆?
涓庝粰鐩熸垬鍙嫔岗钖屾埉鏁岋纴鎸戞垬鍏ㄦ湇瓒呭己镄勫瓨鍦锛屾嫾涓婂叏鐩熶粰鍙嬬殑钻h铡讳簤闇搁潚浜戯纴鍦ㄨ繖娣锋矊涓囱薄镄勪笘鐣屼腑缂旈犲睘浜庤嚜宸辩殑浠欎緺浼犲囷紒?
娓告垙浜镣 銆愭案涓嶅缮璁板埯蹇冿纴𨱍呮婊$偣鏋佽嚧杩桦师銆
銆婂喅鎴樼槠镞ラ棬銆嬭槠铹跺湪鐢婚溃涓婅繍鐢ㄤ简3d鎶链锅氩嚭浜嗗緢澶х殑鍒涙柊锛屼絾瀹冧綋鍐呬粛镞ф湁鎴戜滑镡熸倝镄勪紶濂囱缁燂紒鐑х尓缁幂骇銆佹姢闀栥佸府鎴樸佹矙锘庣瓑浼犲囩殑缁忓吀瑕佺礌灏界撼鍏朵腑锛岃繖灏嗘槸涓涓璁╀綘镒熷埌宕鏂板张镡熸倝镄勪紶濂囧ぇ闄嗭纴鍐嶅害镣圭噧浣犲硅繖鍧楀ぇ闄嗙殑寰佹湇娆叉湜锛
銆愬埛鏂拌呜夊啿鍑伙纴锲炲繂澶ч檰鍐岖幇鐪煎墠銆
銆婂喅鎴樼槠镞ラ棬銆嬮噰鐢ㄦ渶鏂3d鎶链鏋佽嚧杩桦师澶у跺洖蹇嗕腑镄勪紶濂囧ぇ闄嗭纴娓告垙鐣岄溃銆佸煄姹犮佷汉鐗┿佽糠瀹銆乥oss鍏ㄩ溃鍗囩骇锛岃掕壊锷ㄤ綔銆佺壒鏁堢殑娴佺晠搴︿篃锲犳ゅぇ骞呮彁鍗囷纴镟存湁瓒呭己鐜板満绾ч煶鏁埚敖𨱍呮尌娲掍紶濂囬瓌锷涳紒
銆愬己鏁屽竻姘旀潵琚锛岄偅骞存垜浠寰佹湇杩囩殑boss銆
杩樻浘璁板缑涓庡厔寮熶滑鍦ㄨ糠瀹鍒鍏夊墤褰卞埛boss镄勬椂鍏夊悧锛熷湪銆婂喅鎴樼槠镞ラ棬銆3d鎶链镄勬覆镆扑笅锛岃繖浜沚oss灏嗗啀搴﹂吨鐢燂紒鍦ㄥ叏鏂扮殑3d涓栫晫涓闱㈠硅繖浜涚粡鍏竍oss锛岀噧鐑т綘浣揿唴娌夊疯宸蹭箙镄勭儹琛锛屾彁鍒澶ф垬锲涙柟钖э紒
缁间笂镓杩帮纴澧ㄩ奔涓嬭浇绔欐槸鎭ㄥ绘垒瀹夊崜娓告垙鍜岃掕壊镓婕旇В鍐虫柟妗堢殑鐞嗘兂涔嬮夈傛棤璁烘槸瀹夊崜娓告垙瑙掕壊镓婕旂埍濂借呰缮鏄涓扑笟浜哄+锛屾垜浠鎺ㄨ崘瀹夊崜娓告垙瑙掕壊镓婕旂殑鐩稿叧鍐呭归兘鑳芥弧瓒虫偍镄勯渶姹伞傜珛鍗充笅杞芥垨浣挞獙鍐虫垬锏芥棩闂╤5镓嬫父锛屼韩鍙楀畨鍗撴父鎴忚掕壊镓婕斿甫𨱒ョ殑镞犲敖涔愯叮锛佹ゅ栵纴鎴戜滑杩樻彁渚涘喅鎴樼槠镞ラ棬h5镓嬫父镄勮︾粏淇℃伅锛屽寘𨰾锷熻兘浠嬬粛銆佺敤鎴疯瘎浠蜂互鍙婂畼鏂逛笅杞介摼鎺http://www.37moyu.com/azyx/jsby/juezhanrimenh5shouyouv093.html 銆傝╂偍镄勪笅杞借繃绋嬫洿锷犺交𨱒惧揩鎹凤紒