天龙源码框架分析_天龙八部源码描述【转】

天龙八部(武侠世界)的源码很可能是天龙八部代码流出后改写的,因为在看了代码中可以找到一些证据,整个客户端分为:一个是编辑器,一个是客户端,采用OGRE+cegui+自写的简单的物理碰撞检测+FMOD+自写的网络库。

服务器端代码目前没仔细关注

客户端总体的描述如下:

UI系统 CEGUI UI基础系统

CEGUI渲染器

Expat XML解析器 CEGUI依赖,估计编写者不喜欢用

FreeType2 跨平台、开源的字体渲染器 用于绘制中文

脚本 luaPlus

3D显示引擎Ogre开源的高效渲染引擎 最新的OGRE是1.7.2

碰撞检测 Opcode 开源,占用内存少 其他可考虑使用bullet,ODE或者其他(一般根据实际需求选择)

天龙的碰撞检测似乎是只做了简单的碰撞盒检测

TinyXML XML的解析工具 游戏中使用的XML解析器,其实目前可以用RapidXML更加小巧

Music&Sound Effect FMOD SDK即可 ,其实OPENAL也是不错的选择。

WX系统

WXClient Action操作管理 包括聊天,物品,生活技能等 暂时看到,所有实际上都是针对图标的操作

Cursor 鼠标指针管理(还挂接了很多命令)

DataBase 客户端用内存数据库,实现了了WXEngine中的DB定义 包括搜索,获得,打开文件功能TLBB_DBC,可以证实虽然叫武侠,但是留下了天龙的影子

DataPool 将游戏中数据都统一管理,包括UI,TeamOrGroup等 这里面有个CModelShowInUI的类,(奇怪,这个类不应该放在这里吧?)

Event 游戏事件处理器,分为Event队列,和慢处理Event队列 很值得参考的部分!!!使用了注册Event处理函数的方式,参数很灵活!

FakeObject 用于在ui上显示的物体(这里作为一个管理器类)

Helper 用luaPlus导出,另外建一个帮助系统窗口

Input 输入类

Interface 整个游戏的外部接口控制类,所有外部模块需要通过这个接口来控制游戏的数据和控制,作为脚本调用类型

NetWork 网络消息的处理

Object 逻辑基类Object与显示无关,当然派生出可以显示的类型!以及游戏中具体对象类型

Procedure 游戏流程,登陆,角色选择,角色创建,进入场景等待,MMO游戏主流程,登陆服务器

ResourceFiles 各种鼠标.cur文件

Script 脚本系统管理器,继承于Engine的ScriptEnvironment,调用脚本

Sound

Soure File _tWinMain在这里 2

Variable 配置参数系统

World 场景区域Zone,Scene,World管理器,寻路等等功能,一个ZONE的大小正好是一个屏幕的大小,ZONE构成Scene

WXCore

Collision 碰撞检测,主要包裹了ogre的骨骼模型处理方法

EffectSystem 特效系统

Extra附加 ModelType 模型定义

SkeletonMesh (怀疑被废弃)Dobject_NT包裹了Ogre::Entity,可挂接相关特效,SceneNode上

SkeletonMeshUrl 作为存储格式,存储Dobject_NT

LogicModel 渲染层和客户端的结合层,利用渲染层,实现客户端对场景中动态物体的需求,而不需调用渲染层代码

OgreExt 对于Ogre的扩展,渲染

PostFilters 3D画面效果,后期过滤器

ResourceSystem Ogre的文件系统,用于读取和整体加载文件系统

Header Files&&Source Files 可渲染对象层BasicRenderable及其子类

Terrain 实现及其管理编辑,优化

WX::Object 继承了boost::enable_shared_from_this

XercescParser 在这里又发现了另外一个XML的解析库

WX::AcrotObj,WX::ActorObject,WX::LogicModelObject 都要仔细阅读弄清原理

Scene 基类,管理,序列化,编辑等方法

WXEngine Cursor

DataBase

Debuger 调试用的?但是一直没有看出来具体在哪里使用,难道是给脚本?

Exception 里面包括Xzip的压缩目录……,当然也包括抛出异常定义,及CrashReport FakeObject,Gfx,Helper,Input

Math,Profile,Script,Sound

Time,UI,Util,Variable 各种功能的虚类,当然也有具体实现了的类。等待继续整理分析 2

Kernel TDKernel通过全部继承于TDNode(及针对相应TDNode的TDClass)管理类注册及插件信息 CEGUISystem以及WXRender都是通过Plugin的方式加入Kernel(待验证)

TDNode为了Kernel便于组织数据,而定下的核心节点类,类似树

TDClass节点定义类,根据类名取定义类的名字,类似MFC建立了自己的类链 重要的是几个类定义实现宏自动把tClass给赋值初始化了。还顺便实现了CreateObject函数

Game Action

DataPool

Event 2

Interface

Object

World

WXNetPackets Combat 阵营数据结构表,技能及效果数据表记录结构,数据表通用管理读入器 有模板数据管理器

DataBase TLBB_DBC.h 定义服务器客户端通用的DBC数据库文件类

Common 整个游戏的公用Common定义,GameStruct

GameUtil 方便函数,CRC校验,Lock,二进制转化为字符串DB等东西

随机函数,Type,脚本命令结构,技能数据管理,playerStatus 2

重要的PacketDefine

Header Files&&Source Files 基本都是对Common\Net中Packet的具体情况使用实现Packet->Execute PacketDefine的实现

WXRender Camera 3种摄像机

Object RFObject基于WXEngine中渲染层物体基类tEntityNode的实现

RFObj继承于RFObject用于WX::Object对象的包裹,自己指针放在WX::Object的Data中

RFObj_Actor,RFObj_Model,RFObj_Static,都继承于RFObj人物,动态模型,静态模型 2

RFObj_Actor原来设计应该会用到SkeletonMesh.h中的Dobject_NT,但实际上没有产生关联,WXLogicModel被说明是用来替换原来的Dobject 2

Header Files&&Source Files DebugPanel 包括调试信息以及HitObjectPanel(打击信息?)

RenderSystem 整合环境对象,后期渲染过滤管理,及核心System。载入资源技巧有不少在其中

ResourceProvider 资源提供系统,内部使用Ogre的资源组管理器,进行统一的管理判断。 ResourceLoadListener 用于找到分析脚本时的详细错误,里面是ScriptParsingListener : public Orge::ResourceLoadListener真够强大的…… ,

RFFakeObjectManager 用于UI显示的模型在渲染层的管理器

TerrainGrid 地形格可渲染对象

WXObj_ProjTex WXObj投射纹理,包括选择环,阴影斑点,脚印

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/551640.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle查询慢怎么优化,Oracle查询优化-怎样建立索引优化下面的查询语句啊

下面是转换出来的查询语句SELECT *FROM (SELECT "Project1"."C1" AS "C1","Project1"."ID" AS "ID","Project1"."NVC_ORDERBY" AS "NVC_ORDERBY","Project1"."I_ST…

复试情报准备

英语自我介绍,介绍完老师会根据你的回答用英语问你问题,比如介绍一下你的本科学校,或者家乡什么的。计网过一遍,会问两道题。接下来是重点,我当时是根据我成绩单,问了我本科学过的科目,比如pyth…

chrome切换前端模式_Chrome调试工具developer tool技巧 - 轩枫阁

Chrome这个浏览器赞的不能再赞了,给前端的开发调试工作带来了极大的效率提升。Chrome的简洁、快速吸引了无数人,它的启动速度、页面解析速度都很快,同时得益于Google V8的快速,Javascript执行速度也飞快。而且它对HTML5和CSS3的支…

oracle创建索引01652,建立数据表快照导致ora-01652异常

建立数据表快照导致ora-01652错误由于源表过大,数据查询速度较慢,在做后台的相关查询的时候较慢,于是决定创建数据快照,提高查询速度,快照创建语句如下:CREATE SNAPSHOT sn_ydmobilebankREFRESH COMPLETE S…

linux上安装python2.6.9_在Linux CentOS 6.6上安装Python 2.7.9

CentOS 6.6自带的是Python 2.6.6,而编译llvm需要Python 2.7以上。checking for python... /usr/bin/pythonchecking for python > 2.7... not foundconfigure: error: found python 2.6.6 (/usr/bin/python); required > 2.7yum中最新的也是Python 2.6.6&…

用python批量下载网络图片_python 批量下载网页里的图片

import requests import sys,re #设置提取图片url 的正则表达式 imgre re.compile(r" #存放找到的 图片url的列表 all_img_urls [] #图片下载后存放位置 save_path r‘/root‘ #获取指定网页中的图片url def get_img_url(tmpurl,tmpre,allimgurl,timeout10): headers …

php中cnum函数,PHP vprintf() 函数

更多实例例子 1使用格式值 %f&#xff1a;<?php $num1 123;$num2 456;vprintf("%f%f",array($num1,$num2));?>例子 2使用占位符&#xff1a;<?php $number 123;vprintf("有两位小数&#xff1a;%1\$.2f没有小数&#xff1a;%1\$u",array($n…

alter table add column多个字段_利用Python将多个excel合并到一个文件中

数据岗位的小伙伴可能经常会遇到这样一个问题&#xff1a;多个来源返回的数据怎么整合到一个文件中&#xff1f;手动经常会出错&#xff0c;下面介绍一种利用Python处理的方式&#xff1a;前期准备&#xff1a;1、多个excel需要进行数据整理&#xff0c;保证文件的结构一致&…

单链表操作实现getelem_c语言实现--带头结点单链表操作

可能是顺序表研究的细致了一点&#xff0c;单链表操作一下子就实现了。这里先实现带头结点的单链表操作。大概有以下知识点.1;结点&#xff1a;结点就是单链表中研究的数据元素&#xff0c;结点中存储数据的部分称为数据域&#xff0c;存储直接后继地址的部分称为指针域。2;结点…

php ouput buffer,Redis配置详解-客户端缓冲区 output buffer

客户端缓冲区 output buffer大概已经知道Redis是一个内存数据库&#xff0c;这意味着所有的数据都由RAM直接管理和提供的。因此Redis有着卓越的交付性能&#xff0c;Redis可以以亚毫秒级的延迟处理几万、几十万的请求。Redis&#xff0c;如同它的名字和设计&#xff0c;是一个移…

python布尔测试_Python布尔函数:用真值优化代码

Python布尔类型是Python的内置数据类型之一。它用来表示表达式的真实值。例如&#xff0c;表达式1<2为True&#xff0c;而表达式01为False。了解Python布尔值的行为对于在Python中良好编程是非常重要的。Python布尔类型Python布尔类型只有两个可能的值&#xff1a;TrueFalse…

结构体中vector自动为0_面试题:你是如何选择顺序存储数据结构的?

作者&#xff1a;Tarun Telang 来源&#xff1a;https://dzone.com/articles/arraylist-or-linkedlist本文为Java开发人员选择适当的顺序数据结构提供指导。ArrayList 和 LinkedList 是 Java 集合框架中用来存储对象引用列表的两个类。ArrayList 和 LinkedList 都实现 List 接口…

python 公开课_python公开课视频(11~20)

Python基础教程视频教程 各集内容简介 通俗易懂&#xff0c;语言简练&#xff0c;保证入门。 11. Python基础教程视频教程 第 11 集 Python的分支语句if基础 本集主要讲述Python条件分支语句if的基本使用和语法结构&#xff0c;if嵌套和多分支if语句程序设计等问题。 12. Pytho…

oracle 随机排列,oracle的随机排序

oracle的随机排序项目里一个功能要用到随机排序&#xff0c;但是后来又因为数据量大的原因&#xff0c;要分页去查询数据&#xff0c;结果导致查询出来的数据出现重复。原sql如下select * from ( select row_.*, rownum rownum_ from(select * from tble order by dbms_random.…

c# 低功耗蓝牙_c# - 如何使用C#手动绑定到WinForm中的蓝牙低能耗设备? - 堆栈内存溢出...

我想到了。 我走在正确的轨道上。使用以下连接后&#xff1a;var dev await BluetoothLEDevice.FromBluetoothAddressAsync(args.BluetoothAddress);您需要执行自定义配对&#xff1a;var prslt await device.DeviceInformation.Pairing.Custom.PairAsync(DevicePairingKinds…

python字典求平均值_Python - 字典中各个键的每个值的均值

我在跨整个字典进行迭代时遇到问题&#xff0c;无法对键的值中的每个元素进行简单的汇总统计&#xff08;平均值&#xff09;。Python - 字典中各个键的每个值的均值 我的字典由那些号码清单键和值&#xff1a; test_dict{NJ:[20,50,70,90,100],NY:[10,3,0,99,57],CT:[90,1000,…

数字填图问题matlab上机实验报告,数学建模实验报告数字填图问题

数字填图问题一、实验目的及意义本实验旨在通过生活中几个常见的数字填图问题的探究&#xff0c;探究这类问题的逻辑推理解法和计算机解法&#xff0e;二、实验内容1. 数字填图的逻辑推理&#xff1b;2. 数字填图的计算机解法。三、实验步骤1.开启软件平台——MA TLAB&#xff…

c++ 函数指针_进化论——从函数指针到被结构封装的函数指针及参数的应用举例...

↑↑↑ 点击上方公众号名称关注&#xff0c;不放过任何转变的机会。✎ 编 者 悟 语借口再小也会瓦解人的意志。文 章 导 读今天带大家用下函数指针&#xff0c;然后将函数指针和函数参数封装到结构体中&#xff0c;接着将数据用动态分配和静态分配的方式赋值给相应的函数&#…

domino流程图_OA实施工程师一线解读Java与Domino优劣

南宁OA软件泛微运营中心云腾为您分享&#xff1a;作为企业的CIO&#xff0c;不仅要面对企业内部的各类需求&#xff0c;还需要管理理念以及对市面上的信息化系统和技术了如指掌&#xff0c;否则很有可能在自己的职业生涯中划上遗憾的一笔。固然是吃一堑长一智&#xff0c;但谁不…

oracle中packages使用,oracle中packages的使用

最近&#xff0c;由于开发的功能较多&#xff0c;对于编写的很多过程&#xff0c;看着英文名字觉得挺熟悉&#xff0c;但要看功能&#xff0c;则需要每个点开去开备注或者代码&#xff0c;觉得很是郁闷。突见packages&#xff0c;想将所有写的过程放到一起&#xff0c;这样下次…