ARK小白教程(傻瓜式教程)
Windows教程
一唯欣、介紹
ARK很強(qiáng)大嘹吨!
請加ArkGameFrame交流QQ群:540961187
二、下載安裝
1.?從github下載ARKGameFrame源碼(可以是zip包解壓出來的或者通過github?PC端clone下來的)
2.?Windows環(huán)境如下:
檢查自己的電腦
A.?Windows?10,?8.1,?或者?7境氢,更低就不行了蟀拷!
B.??必須安裝?Visual?Studio?2017?或者?Visual?Studio?2015?Update?3?碰纬,不同的版本在添加依賴庫時需要不同的配置,一定注意!
C.???必須安裝Git
我的是VS2017问芬,也就用該版本舉例子悦析。
打開“VS?2017的開發(fā)人員命令提示符”,位置在”開始->Visual?Studio?2017->VS?2017的開發(fā)人員命令提示符”此衅。
如果沒有的話在VS安裝目錄下找到這個這個文件就是了:
Microsoft?Visual?Studio\2017\Community\Common7\Tools\VsDevCmd.bat强戴。
輸入git?--version,查看版本挡鞍,如果有版本信息:
如果沒有安裝骑歹,就馬上安裝吧。
下載地址:https://git-scm.com/downloads
下載完成后要重啟電腦哦墨微。
D.???必須安裝CMake?3.0?+
同樣方法檢查cmake是否安裝道媚,在VS開發(fā)人員命令提示中輸入?cmke?--version
如果安裝了就會出現(xiàn)版本信息,否則提示錯誤翘县。
下載地址:https://cmake.org/download/
安裝成功后一定要重啟電腦最域。
三、啟動Demo
1.?打開VS?開發(fā)命令提示锈麸,我的ARKGameFrame?工程放在G:\MyWork\Ark?目錄下:
進(jìn)入項目根目錄:
進(jìn)入Dep目錄羡宙,執(zhí)行build_dep.bat文件,這可能會消耗較長時間掐隐,下載工程依賴的庫文件。需要注意的是钞馁,VS2017和VS2015?使用的build_dep.bat文件內(nèi)容是不一樣的虑省。
當(dāng)執(zhí)行結(jié)束成功后就可以打開ARKRoot/Frame/ARK.sln?工程了。
對ARK工程進(jìn)行編譯僧凰,如果第一次出錯探颈,再編譯一遍,再出錯那就真錯了训措,就不用編譯了伪节。
執(zhí)行ARKRoot/Shell/GenerateConfigXML.bat?文件,生成工程需要的配置文件绩鸣。
至此怀大,ARK工程就配置完成了。
點擊執(zhí)行ARKRoot/Bin/Server/Debug/Run.bat呀闻,就跑起來了化借。
3.?。捡多。
四蓖康、第一個完整流程
一個完整的流程即:客戶端向服務(wù)器發(fā)送一條消息铐炫,服務(wù)器根據(jù)消息的類型進(jìn)行正確數(shù)據(jù)處理,并給客戶端相應(yīng)的回復(fù)蒜焊。
對于理解ARK還處于小白狀態(tài)的同學(xué)倒信,就要分開理解其中的各個模塊了。
接下來是以英雄模塊(HeroModule)例子來介紹的泳梆。
玩家登陸游戲后鳖悠,請求已解鎖的英雄列表(HeroList),玩家選擇(select)解鎖的英雄(Hero),進(jìn)入游戲場景進(jìn)行游戲鸭丛。當(dāng)玩家有鉆石充足了竞穷,接著可以解鎖(Open)新的英雄。
為了完成這個模塊鳞溉,又要劃分出幾部分:
1.?數(shù)據(jù)部分
包括英雄靜態(tài)表(Property)瘾带,玩家擁有的英雄結(jié)構(gòu)數(shù)據(jù)(Record/)和網(wǎng)絡(luò)之間的傳輸數(shù)據(jù)(Protobuf)。
英雄靜態(tài)數(shù)據(jù)表(Property):
在Bin\Server\DataConfig\Excel目錄下創(chuàng)建Hero.xlsx表格并打開熟菲。
編輯Hero.xlsx表格:
表格內(nèi)容格式從Item.xlsx文件中拷貝即可看政。
因為是Property類型的數(shù)據(jù),所以工作表頁簽要以Property開頭命名抄罕,用于生成工具辨別數(shù)據(jù)類型允蚣。
必須將多余的工作表刪除,否則生成數(shù)據(jù)表會失敗呆贿。
結(jié)構(gòu)數(shù)據(jù)表(Record):
在Bin\Server\DataConfig\Excel目錄下打開Player.xlsx文件唱蒸,這里面是玩家Player的數(shù)據(jù)配置坟岔。
打開Player.xlsx下Record_Hero工作表:
編輯PlayerHero模塊,完成后:
只剩下GUID和ConfigID兩個字段了。刪除其他字段必須刪除干凈你画,不能留下備注等其他痕跡糊饱。
第一行第二列是這個數(shù)據(jù)結(jié)構(gòu)的名字妇蛀,也就是類名针饥。
第2行Row表示內(nèi)存分配多少行這樣的結(jié)構(gòu),比如一共有64個不同的英雄浪秘,那么Row就是64蒋情。
第3行Col表示這個數(shù)據(jù)結(jié)構(gòu)中有幾列,很顯然是兩列耸携,需要改成2棵癣。
下面幾行中Public?表示是否廣播給周圍人,Private表示是否要同步給自己夺衍,Save表示是否要存檔?浙巫,Cache表示??
ConfigID對應(yīng)Hero.xlsx文件中ID的畴,而GUID表示內(nèi)存中游戲世界中的唯一標(biāo)識渊抄。
Hero是Property,是靜態(tài)的丧裁;PlayerHero是Record护桦,是動態(tài)的;Player.xlsx表中PlayerHero配置了玩家持有Hero的數(shù)據(jù)結(jié)構(gòu)煎娇,一會會通過文件轉(zhuǎn)換工具將xlsx表格轉(zhuǎn)換成xml表格供工程加載到內(nèi)存中二庵。
通過Record類型的結(jié)構(gòu)數(shù)據(jù)生成的xml文件會存儲到Bin\Server\DataConfig\Struct\Class目錄下面,通過Property類型的靜態(tài)數(shù)據(jù)生成的xml文件會存儲到Bin\Server\DataConfig\Ini目錄下面缓呛。
靜態(tài)數(shù)據(jù)和結(jié)構(gòu)數(shù)據(jù)都已經(jīng)配置完成催享,需要使用Bin\Server\DataConfig\Tool目錄下面的FileProcess_d.exe工具生成xml文件,雙擊執(zhí)行吧哟绊。
生成過程中如果有錯誤因妙,讀一讀看看能否解決,不行的話聯(lián)系我們吧票髓。
成功后會生成新文件和更新文件:
Proper類型的靜態(tài)數(shù)據(jù)文件:
Record類型的結(jié)構(gòu)文件:
打開Hero.xml后查看一下吧:
Property靜態(tài)配置文件:
Record結(jié)構(gòu)配置文件:
原來是這樣攀涵,有了這兩個配置文件,Server啟動時就可以根據(jù)結(jié)構(gòu)配置生成相應(yīng)的內(nèi)存結(jié)構(gòu)洽沟,并加載靜態(tài)數(shù)據(jù)到內(nèi)存中以故。
通過Protobuf生成類(class):
本例生成Hero?C++?和?C#?類文件。
在Frame\SDK\Proto目錄下創(chuàng)建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?表示該類型為重復(fù)數(shù)據(jù)棘利,所以為列表。
}
如下圖:
這是定義了兩個類朽缴,分別是Hero和HeroList。
Hero類包含了兩個成員變量:int類型的id和string類型的name水援。
HeroList包含了一個成員變量:Hero類型的列表heroList密强。
客戶端向服務(wù)器請求的英雄列表,就是HeroList類型的對象蜗元。
編輯保存后打開同目錄下的gen-proto.bat文件:
將新建的AFMsgHero.proto文件添加進(jìn)去并保存:
雙擊執(zhí)行g(shù)en-proto.bat文件,即可生成名為C++和C#類文件或渤。
在同目錄下生成了C++文件:
在cs目錄下生成了C#文件:
配置協(xié)議ID:
沒有協(xié)議,不成方圓奕扣。協(xié)議是客戶端與服務(wù)器之間通信的橋梁薪鹦。
本例子中需要增加3條協(xié)議:
A.獲取解鎖英雄列表(GetHeroList)、
B.解鎖指定英雄(OpenHero)、
C.選擇指定英雄(SelectHero)池磁。
協(xié)議ID的配置也是通過protobuf生成的奔害。
打開Frame\SDK\Proto目錄下的AFDefine.proto文件:
在enum?EGameMsgID中添加了6條協(xié)議ID:
????????EGMI_REQ_HERO_LIST????????????????????????????????????????????????????????=?140;????????????????????????//?申請英雄列表
????????EGMI_ACK_HERO_LIST????????????????????????????????????????????????????????=?141;????????????????????????//?回復(fù)英雄列表
????????EGMI_REQ_OPEN_HERO????????????????????????????????????????????????????????=?142;????????????????????????//?申請解鎖英雄
????????EGMI_ACK_OPEN_HERO????????????????????????????????????????????????????????=?143;????????????????????????//?回復(fù)解鎖英雄
????????EGMI_REQ_SELECT_HERO????????????????????????????????????????????????=?144;????????????????????????//?申請選擇英雄
EGMI_ACK_SELECT_HERO????????????????????????????????????????????????=?145;????????????????????????//?回復(fù)選擇英雄
REQ表示客戶端向服務(wù)器發(fā)送請求;
ACK表示服務(wù)器向客戶端回復(fù)請求地熄。
再次執(zhí)行同目錄下的gen-proto.bat文件华临,生成更新后的程序文件。
至此端考,Server需要的所有數(shù)據(jù)都已配置完成雅潭。
總結(jié)一下包括:英雄的靜態(tài)數(shù)據(jù)Hero(Property),玩家擁有英雄的數(shù)據(jù)結(jié)構(gòu)PlayerHero(Record)却特,以及通過Protobuf生成的C++/C#類文件扶供。
2.?服務(wù)器拓展模塊
ARK拓展模塊能力是非常強(qiáng)大的。
今天多了一個需求需要增加一個模塊裂明,明天刪除一個需求減少一個模塊椿浓,模塊變更很正常。
本例中需要增加HeroModule模塊漾岳。
打開Frame/ARK.sln工程轰绵,我們將在解決方案下Server/GameServer/AFGameLogicPlugin插件中工作。
創(chuàng)建目錄HeroModule尼荆,并創(chuàng)建AFIHeroModule.h接口類左腔,
注冊Modulle:
在AFGameLogicPlugin.cpp中注冊HoroModule:
代碼如下:
REGISTER_MODULE(pPluginManager,?AFIHeroModule,?AFCHeroModule)