




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ZBM ZBM 一 一 TLBBTLBB 添加新地图 步驟如下 添加新地图 步驟如下 1 在资源文件里的在资源文件里的 Server Config CofigInfo ini 把变量把变量 SystemMode1 设为设为 1 因为该变量在服务器有个判断 当 SystemMode1 为 0 只加载 10 张地图 当 SystemMode1 为 1 就根据当前文件夹里的 SceneInfo ini 里的 scenenumber 加载多少 张地图 这个步骤可以省略 当你在 SceneInfo ini 替换前十张地图的变量 file 2 记住新地图的格式在记住新地图的格式在 SceneInfo ini 格式要求如下 格式要求如下 scene0 threadindex 0 驱动线程的索引 name 洛阳 场景名字 active 1 场景是否激活 file newScene scn 场景文件名 serverId 0 此场景是由哪个服务器端程序调用的 type 0 场景类型 如果是 0 表示普通游戏场景 如果是 1 表示副本 3 在资源文件里的在资源文件里的 Client Config SceneDefine txt 根据格式 替换或者增加 你们懂的 就像下面这样的格式 IDServerIDCityLevelNameXsizeZsizeFairyRegionBuildMiniMapBackSoundSceneMapPosXPosYNamePosXNamePosYSceneLevelNameNomalImageSetNameNomalImageNameHoverImageSetNameHoverImage 000 洛阳 320320newScene ScenenewScene regionnewScene wCollisionnewScene jpg18daliscene590394590414Sign5MiniMap Icon2LuoYang NormalMiniMap Icon2LuoYang Hover 下面是需要更换的格子 CityLevelNameXsizeZsizeFairyRegionBuildMiniMap BackSound SceneMap PosX PosYNamePosX NamePosYSceneLevelNameNomalImageSet NameNomalImage 其中 SceneMap 格式 是需要一系列像这样的 图 1 0 建议 建议 你复制其他地图的 比如你复制其他地图的 比如 daliscenedaliscene 4 打开打开 Scene 里的地图文件 发现一个里的地图文件 发现一个 SCN 格式的文件 里面是格式的文件 里面是 navmapname newScene nav monsterfile newScene monster ini patrolpoint newScene patrolpoint ini growpointdata newScene growpoint txt growpointsetup newScene growpointsetup txt eventfile newScene area ini petfile newScene pet ini platformfile newScene platform ini stallinfodata newScene StallInfo stall 但是 有的不能从地图编辑器生成这些文件 所以 你还得添加这些文件 怎么添 加呢 从其他的地图文件 原来的 复制改下名 当然了 你也需要一个 scn 的 文件 就像上面一样 下面会有需要增加的文件数量 下面是从地图编辑器生成一个新场景后 生成的文件 xinchangjing Dijkstra xinchangjing GridInfo地表信息 每个点的位置 UV 法线 材 质 xinchangjing Heightmap高度图 xinchangjing nav乱码 xinchangjing Region寻路方式 已经放弃 改用 path xinchangjing Scene 有对应的 Terrain 的文件路径 环境光 静态模型 树 建筑物等 xinchangjing Terrain封装了地图的内容 里面是对一个地图所需要的内 容 GridInfo Heightmap texture material 文件的路 径 xinchangjing Wcollision碰撞 调整人物高度 y 值 xinchangjing area ini区域 长方形 作用 xinchangjing growpoint txt INT INT FLOAT FLOAT 什么意思 xinchangjing monster ini地图上 Object 对象定义 看下面相关 1 xinchangjing patrolpoint ini可操作台 传送门 打造台 缝纫台 工艺 台 xinchangjing StallInfo stall乱码 相关 1 scene 里的 dali monster ini info monstercount 134共有几个例子共有几个例子 monster0 第几个第几个 NPC guid 全局全局 ID type 193类型类型 还有疑问还有疑问 name 崔逢九崔逢九名字名字 title 驿站老板驿站老板标题 就是称谓标题 就是称谓 pos x 241 3763X 坐标坐标 pos z 136 5375Y 方向方向 dir 27坐标坐标 script id 2026关联的脚本关联的脚本 ID respawn time 1000自杀换人 重新执行 多少帧渲染 自杀换人 重新执行 多少帧渲染 group id 1团队团队 ID team id 1队伍队伍 ID base ai 3AI 程度程度 ai file 0AI 文件文件 patrol id 1巡逻巡逻 ID shop0 1关联商店关联商店 0 shop1 1关联商店关联商店 1 shop2 1关联商店关联商店 2 shop3 1关联商店关联商店 3 ReputationID 1名声 名誉 名声 名誉 level 1等级等级 npc 1 camp 8阵营阵营 补充 你如果看其他的补充 你如果看其他的 monster ini 会发现写的变量挺多不一样的 有的可忽略 会发现写的变量挺多不一样的 有的可忽略 下面是一个完整地图所需要的文件 下面是一个完整地图所需要的文件 图 1 1 记得把你的 记得把你的 1 地图编译器的生成文件地图编译器的生成文件 2 对照着原本地图添加的文件 这些文件对照着原本地图添加的文件 这些文件 放入放入 资源资源 天龙版天龙版 Public Scene 里面里面 需要增加的文件是 多了 scn 文件 jpg lightmap 光照 pet 宠物 monster preload NPC 所需要的 obj 文件 scnscnee jpg 小地图 5 还得在在资源文件里的还得在在资源文件里的 Server Config DefaultChar ini 该文件是你新生成的角色的初始内容 下面是其实场景该文件是你新生成的角色的初始内容 下面是其实场景 camp 0 scene 0 起始场景 pos x 130 0 起始位置 X pos z 130 0 起始位置 Z camp 1 scene 0 起始场景 pos x 130 0 起始位置 X pos z 130 0 起始位置 Z 修改 2 个起始场景 对应 你在第 1 步骤里填写的 ID 例如 洛阳是 0 scene0 threadindex 0 驱动线程的索引 name 洛阳 场景名字 做完这几步骤 当你进入游戏 就是一个由你自己设定的那个地图的样子了 做完这几步骤 当你进入游戏 就是一个由你自己设定的那个地图的样子了 二 二 客户端代码地图加载器解析 客户端代码地图加载器解析 分析 浮出水面的这样几个文件 A Client Config SceneDefine txt 突破口一 B public scene 里相关地图的那些内容 看上面的图 1 1 完整的地图所需要 文件 突破口二 C Server Config SceneInfo ini 服务器的 张师傅的活 直接咔嚓 顺便啰嗦几句 A SceneDefine txt 里面主要的是这些内容 INTnLocalID INTnServerID ServerID is here INTnCityLevel LPCSTRszName INTINTnXSizenXSize INTINTnZSize nZSize LPCSTRLPCSTRszWXObjectName szWXObjectName LPCSTRLPCSTRszRegionFile szRegionFile LPCSTRLPCSTR szCollisionfileszCollisionfile 建筑物行走面文件 碰撞 LPCSTRszMiniMap INTnBackSound LPCSTR szSceneMap INTnWroldMapPosX INTnWroldMapPosY 场景图标所在得位置 INTnNameWroldMapPosX INTnNameWroldMapPosY 场景名字所在得位置 LPCSTRszSceneType 场景得图标等级 LPCSTRszCityNameNormalImageSet 场景正常名字所用得图片资源 LPCSTRszCityNameNormalImage 场景正常名字所用得图片资源 LPCSTRszCityNameHoverImageSet 场景高亮名字所用得图片资源 LPCSTRszCityNameHoverImage 场景高亮名字所用得图片资源 图 2 0 题外 这些是在 Client 里的 WXEngine DataBase TDDBC Struct h 里一个结构类型 DBC SCENE DEFINE 场景定义 怎么找到的呢 在 Client 搜索 SceneDefine txt重要结果就是下面的这行 DBC SCENE DEFINE SceneDefine txt 这是一个另一个结构体 DATABASE DEFINE 数组里的元素 透过该行 其实程序就是用这个结构体 去解析文件 就是拿这个瓢去装水 因 为该 txt 文件 都是一个固定格式的 刚好这个结构体对应 这样结构体就存着文件里 的信息 当然了 肯定还有一个函数 封装了无论怎么样的结构体都能对对应的文件 解析 重点 上面的红色 LPCSTR szWXObjectName 指的地图的 Scene 文件 而 Scene 文件里 重要的是 就是一个 Terrain 的路径 封装了 Terrain 而 Terrain 文件里 重要的是 heightmaptype standard gridInfotype standard 明白了吧 有 Heightmap 与 GridInfo 的路径 名字 大小 纹理等信息 Heightmap 高度图 GridInfo 则是一个记录地表信息的文件 因为是二进制 的 所以看不到 不过 百度说是 每个点的位置 UV 法线 材质 就相信它 吧 结论 现在应该有一个这样的概念 图 2 1 所以我们在标题一 TLBB 添加新地图里 需要那些步骤 都是有凭有据的 细心的同学 会发现手动添加的 scn 文件 没有在这出现 scn 唯一出现在 Server Config SceneInfo ini 里面 这是在服务器的配置文件 先放放 相信张师傅肯定能解疑的 这些文件作用 具体参考上面和标题一这些文件作用 具体参考上面和标题一 TLBB 添加新地图里的添加新地图里的 第第 4 步骤 步骤 SceneDefine txt scene 文件 region 文件 WCollision 文件 lightmap 文件 小地图文件 等 Terrain 文 件 Heightmap 文件 GridInfo 文件地表纹理文件大小等数据 了解了图 2 0 不难 发现 那么操作 SceneDefine 就操作了整个地图所需要的内容 而且在上面也提到过 在 Client 里的 WXEngine DataBase TDDBC Struct h 里与之相 关的是一个结构类型 DBC SCENE DEFINE 场景定义 等于说 程序对结构体对象赋值 然后再调用结构体对象 就能调出所对应地图的所有信 息了 有了一张完整地图所需要的信息 程序里又能索引到这些信息文件 那么程序又是怎么样 从这些文件获取更重要的信息 来组建程序里的地形类呢 线索入手 在代码里搜索 DBC SCENE DEFINE 因为这是地图文件的程序入口 在 WXClient world Scene cpp 类 Scene Scene 类的作用 是围绕着成员变量const DBC SCENE DEFINE m pTheDefine 通过这个场景定义结构 解析地图所需要的文件 加载重要的信息 看下面的重要函数 然后构成一个场景 注意 不明白这个场景定义结构 见上面的图注意 不明白这个场景定义结构 见上面的图 2 0 TLBB 里面 一个场景有这些内容的 A 网格 CZONE 用来把场景分割分成一个屏幕大小 便于管理 B Region 用来在 CZONE 注册 来表示不可行走区域 Region 文件 用来寻路 C 可行走面 Wcollision 文件 建筑的行走面 例如桥 等 D 环境音效 有音效 那肯定也有相应的管理 比如声大声小 E 如果是玩家城市 还得加载玩家建筑数据 F 地形 Terrain 文件 G NPC 资源 重要函数 重要函数 1 初始化场景初始化场景 函数函数 VOID CScene Initial VOID a 构建网格 CZONE 注意 这里的网格 不是 mesh 的顶点网格 更不是地形的网格 而是将整个游 戏场景分割成固定大小的网格 每个网格单位为一个 Zone 一个 Zone 的大小跟 一个屏幕的大小类似 当然场景定义结构里 图 2 0 INTINTnXSizenXSize INTINT nZSize nZSize 这 2 个参数决定 CZONE 的大小 图 2 2 CLient Config SceneDefine txt 320 当然不会这么大 看这个函数里 m nZoneXSize pSceneDefine nXSize SIZE OF ZONE 而且在头文件定义 enum SIZE OF ZONE 10 Zone 的大小 故洛阳 苏州 大理的场景就是 32 32 的 ZONE 也是挺大的 b 加载 Region Region 不可行走区域 1 先放入到 Region 链表 std vectorm theRegion 2 再全部都注册到 CZONE 上的 RegisteAllRegion 3 加载 Dijkstra 文件 LoadDijk Dijkstra 迪杰斯特拉 算法是典型的单源最短路径算法 用于计算一 个节点到其他所有节点的最短路径 主要特点是以起始点为中心向 外层层扩展 直到扩展到终点为止 c 加载可行走面 m WalkCollisionMng LoadCollisionTriInfoFromFile m pTheDefine szCollisionfile 类成员变量 CBuildingCollisionMngm WalkCollisionMng 在 WXCLient Building CollisionMng CbuildingCollisionMng h 有定义 CbuildingCollisionMng 这是一个类 1 用来加载 Wcollision 文件 2 传入平面 x z 坐标 得到高度 3 判断该建筑物是否有行走面 4 清空数据 d 加载环境音效 这个就先放放 0 e 如果是玩家城市 还得加载玩家建筑数据 这个好像荒废很久 我看玩家城市都没 2 进入场景进入场景 函数函数 VOIDEnterScene VOID a 在渲染层创建地形 加载场景文件 scene 文件 CGameProcedure s pGfxSystem Scene Load m pTheDefine nLocalID m pTheDefine szWXObjectName 用的是对象 CGameProcedure s pGfxSystem 图形输出系统 CrenderSystem 的指针 传入 2 个参数 分别是本地 ID 和 scene 文件名 到 CrenderSystem 的函数 Scene Load 1 卸载所有资源 2 加载场景文件 scene 文件 m pRenderSystem loadSceneFromResource 这个函数还不是最底层的函数 我一层一层往下查找定义 到最后面 WXCore Source Files WXSceneInfo cpp void SceneInfo load XMLParser parser const String serializer load this parser filename groupName WxCore Source files WXSceneSerializer cpp Void SceneSerializer load Scene scene XMLParser parser const String WXCore Source Files TerrainData cpp TerrainData load XMLParser parser const String CGameProcedure s pGfxSystem Scene PreLoad szPreLoadFile 用的是对象 CGameProcedure s pGfxSystem 图形输出系统 CrenderSystem 的指针 传入参数是 monster preload 文件名到该函数 Scene PreLoad 该函数是最底层的 用于在资源管理组的 General 加载 monster preload 文件 补充说下 补充说下 monster reload 文件里面的内容是 文件里面的内容是 例如例如 dali monster preload 图 2 5 很简单的排列方式 只要按着一行一行读 就好了 c 播放背景音乐 补充 补充 EnterScene 函数函数 只是预加载只是预加载 NPC 的的 obj 模型文件模型文件 真正摆设这些真正摆设这些 NPC 位置 或者位置 或者 给给 NPC 赋值 名字 阵营 等级 赋值 名字 阵营 等级 lua 脚本关联脚本关联 ID 等 等 都是在地图文件 都是在地图文件 dali monster ini 里面里面 结论 结论 通过通过 initial 函数 函数 EnterScene 函数 程序就加载了一个函数 程序就加载了一个 ZONE 分割的有地形 静分割的有地形 静 态模型 包括态模型 包括 NPC 模型 模型 环境音效的完整场景 环境音效的完整场景 这只是加载 这只是加载 然后 通过加载 然后 通过加载 类类 TerrainData 有地形数据有地形数据 类类 SceneSerializer 有模型数据有模型数据 被类 被类 SceneInfo 封装 封装 猜测 猜测 至今为止 我们看到了 解析地图文件 加载地图文件 获得地形 模型数据 那创建呢 既然 TLBB 用到了 Ogre 应该用到 Ogre 的场景管理器 加载的地形直接用 Ogre 的创建地形 加载的静态模型也直接用 Ogre 的 scenenode 挂接管理 可是封装 Ogre 的场景管理器究竟是哪个类呢 下面是结论与猜测为基础的下面是结论与猜测为基础的 分析图 分析图 图 2 6 图 2 7 Scene 类 图形渲染系统 CRenderSystem Scene Load 加载场景 Ogre 渲染场景 Ogre Root getSingleton renderOneFrame Ogre 资源组管理 ResourceGroupManager 在组 General 加载资源 现在有模型数据 SceneSerializer 地形数据 TerrainData 详看上面的加载 Word 第 7 页 Ogre 场景管理器 SceneManager 在这创建地形与模型 暂时没发现如何创建 场景定义 DBC SCENE DEFINE 见图 2 0 Initial 函数函数 a 构建网格 CZONE b 加载 Region c 加载可行走面 d 加载环境音效 e 如果是玩家城市 还得加载玩家建 筑数据 EnterScene 函数函数 在渲染层加载地形与预加载 NPC 资源 调用图形渲染系统 CrenderSystem Scene Load Scene PreLoad 这 2 个函数 现状 加载场景有了 场景数据 模型数据 地形数据 也有了 那创建呢 Ogre 渲染对象是 在场景管理器完成的 那现在我们的目标就是找出场景的创建 和 Ogre 场景管理器 后来 我发现我忽略了一个地方 在图形渲染系统 CrenderSystem 里的 Scene Load 加载场景 该函数在 Scene 里的 EnterScene 函数调用 第二步骤 加载场景文件 详见上面的 EnterScene word 第 7 页 m pRenderSystem loadSceneFromResource WX System m pRenderSystem 是一个 system 的指针 loadSceneFromResource 定义如下 Void System loadSceneFromResource XMLParser parser const String 释放资源 mSceneInfo load parser name groupName isEditable 加载 scene 文件 该行作用是加载了模型与地形 postprocessScene 就是在这里创建场景 postprocessScene 定义如下 void System postprocessScene void mBaseScale Ogre Math Sqrt getTerrainData mScale x getTerrainData mScale z Adjust the camera to fit to current scene adjustCamera clearExceptionInfo bakeStaticGeometries 0 生成 terrain type info mTerrainTypeInfos setTerrainData mTerrainData Scene PreLoad 预加载场景 在这里是加载 NPC 的 OBJ 文件 是利用 XML 来读取 的 也是用 Ogre 资源组 在组 General 加载资 源 mTerrainTypeInfos updateTerrainTypeInfos Create render instances mSceneInfo initialise this 告诉特效系统当前场景的灯光信息 EffectManager getSingleton getMainSceneLight updateLightInfo 结论
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 会计审计面试题库:经典面试题及答案解析
- 混凝土强度与性能试验方案
- 林业大数据分析师面试题及答案分享
- 研学基地学校文化建设与品牌传播方案
- 2025年铁路车站值班员职业技能(中级)考试题库及答案
- 输电线路线路保护设计方案
- 2025年化学概论期末试题及答案
- 字体设计理论知识考核试题及答案
- 2025年拯救星球测试题及答案
- 宿舍楼物业管理与服务优化方案
- 董事长的权利、职责、义务(5篇)
- 2024年安全员C证模拟考试1000题(附答案)
- 高中语文课程标准-(修改版)
- K31作业现场安全隐患排除(K3)
- 港口基础设施监测技术
- 人教版小学五年级数学下册《第五单元 图形的运动(三)》大单元整体教学设计2022课标
- 全国中学教师《初中数学》说课教学比赛-主题:《等腰三角形的性质》说课-一等奖课件
- 2024年工会财务知识竞赛试题及答案
- 26个英语字母描红练习(素材)-小学英语
- DL∕T 686-2018 电力网电能损耗计算导则
- 2023年河南省中考数学试卷及答案
评论
0/150
提交评论