ARK小白教程(傻瓜式教程)
Windows教程
一、介绍
ARK很强大!
请加ArkGameFrame交流QQ群:540961187
二、下载安装
1. 从github下载ARKGameFrame源码(可以是zip包解压出来的或者通过github PC端clone下来的)
2. Windows环境如下:
检查自己的电脑
A. Windows 10, 8.1, 或者 7,更低就不行了!
B. 必须安装 Visual Studio 2017 或者 Visual Studio 2015 Update 3 ,不同的版本在添加依赖库时需要不同的配置,一定注意!
C. 必须安装Git
我的是VS2017,也就用该版本举例子。
打开“VS 2017的开发人员命令提示符”,位置在”开始->Visual Studio 2017->VS 2017的开发人员命令提示符”。
如果没有的话在VS安装目录下找到这个这个文件就是了:
Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat。
输入git --version,查看版本,如果有版本信息:
如果没有安装,就马上安装吧。
下载地址:https://git-scm.com/downloads
下载完成后要重启电脑哦。
D. 必须安装CMake 3.0 +
同样方法检查cmake是否安装,在VS开发人员命令提示中输入 cmke --version
如果安装了就会出现版本信息,否则提示错误。
下载地址:https://cmake.org/download/
安装成功后一定要重启电脑。
三、启动Demo
1. 打开VS 开发命令提示,我的ARKGameFrame 工程放在G:\MyWork\Ark 目录下:
进入项目根目录:
进入Dep目录,执行build_dep.bat文件,这可能会消耗较长时间,下载工程依赖的库文件。需要注意的是,VS2017和VS2015 使用的build_dep.bat文件内容是不一样的。
当执行结束成功后就可以打开ARKRoot/Frame/ARK.sln 工程了。
对ARK工程进行编译,如果第一次出错,再编译一遍,再出错那就真错了,就不用编译了。
执行ARKRoot/Shell/GenerateConfigXML.bat 文件,生成工程需要的配置文件。
至此,ARK工程就配置完成了。
点击执行ARKRoot/Bin/Server/Debug/Run.bat,就跑起来了。
3. 。。
四、第一个完整流程
一个完整的流程即:客户端向服务器发送一条消息,服务器根据消息的类型进行正确数据处理,并给客户端相应的回复。
对于理解ARK还处于小白状态的同学,就要分开理解其中的各个模块了。
接下来是以英雄模块(HeroModule)例子来介绍的。
玩家登陆游戏后,请求已解锁的英雄列表(HeroList),玩家选择(select)解锁的英雄(Hero),进入游戏场景进行游戏。当玩家有钻石充足了,接着可以解锁(Open)新的英雄。
为了完成这个模块,又要划分出几部分:
1. 数据部分
包括英雄静态表(Property),玩家拥有的英雄结构数据(Record/)和网络之间的传输数据(Protobuf)。
英雄静态数据表(Property):
在Bin\Server\DataConfig\Excel目录下创建Hero.xlsx表格并打开。
编辑Hero.xlsx表格:
表格内容格式从Item.xlsx文件中拷贝即可。
因为是Property类型的数据,所以工作表页签要以Property开头命名,用于生成工具辨别数据类型。
必须将多余的工作表删除,否则生成数据表会失败。
结构数据表(Record):
在Bin\Server\DataConfig\Excel目录下打开Player.xlsx文件,这里面是玩家Player的数据配置。
打开Player.xlsx下Record_Hero工作表:
编辑PlayerHero模块,完成后:
只剩下GUID和ConfigID两个字段了。删除其他字段必须删除干净,不能留下备注等其他痕迹。
第一行第二列是这个数据结构的名字,也就是类名。
第2行Row表示内存分配多少行这样的结构,比如一共有64个不同的英雄,那么Row就是64。
第3行Col表示这个数据结构中有几列,很显然是两列,需要改成2。
下面几行中Public 表示是否广播给周围人,Private表示是否要同步给自己,Save表示是否要存档 ,Cache表示??
ConfigID对应Hero.xlsx文件中ID,而GUID表示内存中游戏世界中的唯一标识。
Hero是Property,是静态的;PlayerHero是Record,是动态的;Player.xlsx表中PlayerHero配置了玩家持有Hero的数据结构,一会会通过文件转换工具将xlsx表格转换成xml表格供工程加载到内存中。
通过Record类型的结构数据生成的xml文件会存储到Bin\Server\DataConfig\Struct\Class目录下面,通过Property类型的静态数据生成的xml文件会存储到Bin\Server\DataConfig\Ini目录下面。
静态数据和结构数据都已经配置完成,需要使用Bin\Server\DataConfig\Tool目录下面的FileProcess_d.exe工具生成xml文件,双击执行吧。
生成过程中如果有错误,读一读看看能否解决,不行的话联系我们吧。
成功后会生成新文件和更新文件:
Proper类型的静态数据文件:
Record类型的结构文件:
打开Hero.xml后查看一下吧:
Property静态配置文件:
Record结构配置文件:
原来是这样,有了这两个配置文件,Server启动时就可以根据结构配置生成相应的内存结构,并加载静态数据到内存中。
通过Protobuf生成类(class):
本例生成Hero C++ 和 C# 类文件。
在Frame\SDK\Proto目录下创建AFMsgHero.proto文件并编辑如下代码。
syntax = "proto2";//固定格式
package AFMsg; //包名为 AFMsg
message Hero //定义Hero类
{
required int64 id = 1; //类型为 int64 变量名为 id 的字段。
//required 为必须字段
optional string name = 2; //类型为 sting 变量名为 name 的字段。
//optional 为可选字段
}
message HeroList //定义HeroList
{
repeated Hero heroList = 1; //类型为 Hero 变量名为 heroList 的列表。
//repeated 表示该类型为重复数据,所以为列表。
}
如下图:
这是定义了两个类,分别是Hero和HeroList。
Hero类包含了两个成员变量:int类型的id和string类型的name。
HeroList包含了一个成员变量:Hero类型的列表heroList。
客户端向服务器请求的英雄列表,就是HeroList类型的对象。
编辑保存后打开同目录下的gen-proto.bat文件:
将新建的AFMsgHero.proto文件添加进去并保存:
双击执行gen-proto.bat文件,即可生成名为C++和C#类文件。
在同目录下生成了C++文件:
在cs目录下生成了C#文件:
配置协议ID:
没有协议,不成方圆。协议是客户端与服务器之间通信的桥梁。
本例子中需要增加3条协议:
A.获取解锁英雄列表(GetHeroList)、
B.解锁指定英雄(OpenHero)、
C.选择指定英雄(SelectHero)。
协议ID的配置也是通过protobuf生成的。
打开Frame\SDK\Proto目录下的AFDefine.proto文件:
在enum EGameMsgID中添加了6条协议ID:
EGMI_REQ_HERO_LIST = 140; // 申请英雄列表
EGMI_ACK_HERO_LIST = 141; // 回复英雄列表
EGMI_REQ_OPEN_HERO = 142; // 申请解锁英雄
EGMI_ACK_OPEN_HERO = 143; // 回复解锁英雄
EGMI_REQ_SELECT_HERO = 144; // 申请选择英雄
EGMI_ACK_SELECT_HERO = 145; // 回复选择英雄
REQ表示客户端向服务器发送请求;
ACK表示服务器向客户端回复请求。
再次执行同目录下的gen-proto.bat文件,生成更新后的程序文件。
至此,Server需要的所有数据都已配置完成。
总结一下包括:英雄的静态数据Hero(Property),玩家拥有英雄的数据结构PlayerHero(Record),以及通过Protobuf生成的C++/C#类文件。
2. 服务器拓展模块
ARK拓展模块能力是非常强大的。
今天多了一个需求需要增加一个模块,明天删除一个需求减少一个模块,模块变更很正常。
本例中需要增加HeroModule模块。
打开Frame/ARK.sln工程,我们将在解决方案下Server/GameServer/AFGameLogicPlugin插件中工作。
创建目录HeroModule,并创建AFIHeroModule.h接口类,
注册Modulle:
在AFGameLogicPlugin.cpp中注册HoroModule:
代码如下:
REGISTER_MODULE(pPluginManager, AFIHeroModule, AFCHeroModule)