摩比秀換裝遊戲系統設計與實現

如何開發一個可維護性,可擴展,跨平臺的換裝遊戲呢,本文從產品設計、龍骨動畫、前端再到後端如何管理等角度,來介紹骨骼換裝遊戲從0到1的實現過程。

項目背景

  咱們一直在思考,如何能激勵學員自主學習的積極性?從上課表現良好、app上及時完成課後練習等途徑掙的星星,但這些學員得到的星星多了也沒有興趣了,咱們須要一個途徑能讓學員的星星有價值,這樣就能產生一個良性的循環來激勵學習。這樣的背景下,咱們設計了一套這樣的系統。javascript

1.jpg

  咱們的學員能夠在經過星星來兌換不一樣虛擬服裝,穿上後在課前點名環節就能夠穿着這件衣服展現在咱們的IPS上,同窗們均可以看到,同時還能夠領養小寵物,領養寵物以後就能夠進行各類各樣的學習了,好比:「編程啓蒙」,讓孩子們感覺程序的魅力。html

  今天就來講一說換裝這一塊具體的實現方案。前端

體驗地址:java

小demo :https://activity.firstleap.cn/egretLeapDemo/index.html編程

技術選型

咱們考慮到跨平臺性,須要在App裏、服務號、白板端等場景下使用,決定用H5來開發,而後又對比了一些遊戲引擎Cocos2d-js和Egret等,最終決定採用Egret+Dragonbones來實現。json

image

官網:https://egret.com/後端

基本概念

首先來講一下骨骼動畫裏的一些基本概念,只有瞭解了這些,才能進行後面的遊戲開發、系統管理的設計等。微信

1)骨架

骨架是骨骼的集合,骨架中至少包含一個骨骼。
下圖中的root及其如下的樹狀結構即是一個典型的骨架。app

image

2)骨骼

骨骼是骨骼動畫的基本組成部分。骨骼能夠旋轉,縮放,平移。下圖中的body、mouth等都是骨骼。
上圖中root下的指針形式的就是一個個的骨骼。運維

3)插槽

插槽是圖片的容器,是骨骼和圖片的橋樑。換句話來講就是換裝的衣服、武器等的圖片是放在插槽裏的。一個骨骼下面能夠有多個插槽,一個插槽下能夠有多張圖片,但同一時間只能有一張圖片處於顯示狀態,其餘的圖片會處於隱藏狀態。插槽內的圖片也能夠所有處於隱藏狀態。插槽的位置,縮放,旋轉那麼圖片也跟着進行相應的變化。

image

插槽的這幾個屬性值很重要,每個物品的位置可能都不是同樣的,好比金箍棒這個的座標是x: -190,y:78,scale:0.8,其餘的物品的座標可能就不是這個了,好比這個西瓜扇子,

image

他的這幾個屬性值就和金箍棒的不同了。因此咱們後邊新建物品(服裝、道具等)的時候,除了傳圖片這幾個值也是要可編輯的。

另一個值得注意的是插槽是有層級的,好比說,帽子按道理講是要在頭髮的上面,眼鏡是要在眼睛眉毛的上面等。

image

可是這個帽子放上來後呢,後面會鏤空一部分,看上去假假的,不立體。這種狀況就須要在腦殼的後面在加一個插槽,用來放帽子的後面部分,把腦殼圍起來。

image

這樣是否是就天然多了,因此咱們後邊新建一個物品的時候,須要填寫他都包含了哪些插槽,而後對每一個插槽的圖片(影片剪輯、龍骨)進行編輯。

4)圖片

圖片就很好理解啦,換裝基本的就是經過更換圖片的方式了。Dragonbones支持紋理集和單個的圖片。

5)骨骼動畫

image

動畫設計這塊就很少說了,跟Flash很相似,交給咱們的UI老師就好了,咱們只須要調用動畫名播放就能夠了

animation.play("stand");

6)數據格式

那一個龍骨的人物建好以後選擇導出,導出界面以下:
image

會獲得3個文件,一個是紋理集,一個是紋理集的配置,一個是龍骨的骨骼數據。以後後臺建立角色的時候就須要上傳這三個文件。

前端H5程序實現

咱們拿到文件後,該怎麼顯示到咱們的頁面上呢?這個文檔裏也寫的挺清楚了,不算太複雜。

1)實例化資源

let dragonbonesData = RES.getRes( "mobi_ske_json" );  
let textureData = RES.getRes( "mobi_tex_json" );  
let texture = RES.getRes( "mobi_tex_png" );

2)DragonBones動畫由工廠類進行管理,可使用EgretFactory對象來處理全部的動畫數據以及貼圖。解析數據添加進工廠

let egretFactory: dragonBones.EgretFactory = dragonBones.EgretFactory.factory;
egretFactory.parseDragonBonesData(dragonbonesData);  
egretFactory.parseTextureAtlasData(textureData, texture);

3)提取出須要的骨架系統

let armatureDisplay: dragonBones.EgretArmatureDisplay = egretFactory.buildArmatureDisplay("robot");

4)添加到舞臺

this.addChild(armatureDisplay);
armatureDisplay.x = 200;
armatureDisplay.y = 300;

5)播放動畫

armatureDisplay.animation.play("Walk");

6)換裝

let hairSlot = armatureDisplay.armature.getSlot("hair");            
var hairImg:egret.Bitmap = new egret.Bitmap();            
hairImg.texture = RES.getRes("yang_png" );            
hairImg.x = hairSlot.display.x;            
hairImg.y = hairSlot.display.y;            
hairImg.anchorOffsetX = hairImg.width/2;            
hairImg.anchorOffsetY = hairImg.height/2;            
hairSlot.setDisplay(hairImg);

到這裏就顯示出來咱們剛創建的一個龍骨動畫,而且給他換了件行頭。

設計後臺管理系統

那麼知道了前面這些,後臺該怎麼設計出來一個可擴展、易維護的系統呢?
首先咱們要知道要管理什麼。
首先管理角色,就是但願切換不一樣的體型,好比小豆豆和機器人之間切換,這麼就建立角色的時候須要把龍骨的三個文件上傳。

10.jpg

image

體型建立完後咱們須要方便的管理該體型下的服裝,就先須要加個分類,好比帽子、衣服、褲子、武器等分類

12.jpg

分類該擁有什麼屬性呢?
就拿咱們前面說的帽子,確定要有分類名和縮略圖,還須要有他下面包含的插槽。

image

還有一個比較重要的屬性就是這個是否能夠爲空,爲何要有這個設置呢?前面換裝的時候咱們點擊穿上,再點擊會脫下該物品,那麼若是不容許爲空的話,就沒法脫下了。舉個栗子,好比想換個眼睛、嘴巴這種,那咱們就不能給脫掉,不然腦補一下就知道。

添加好這些後咱們就能夠添加一個個的物品了,好比咱們上面說的西瓜帽子。

image

把咱們剛纔配的資源信息填上,這裏的資源類型能夠是圖片、影片剪輯或者龍骨等。這樣一個物品就建立成功了。

這一層基本是開發人員配置的。
配完以後就能夠添加商品了

image

商品是什麼概念呢,其實就是物品拿去賣,加上了商品的一些屬性,好比價格折扣促銷等等。這樣設置完上架就能夠在前端商店看到該商品了。

能夠看到咱們的商店還支持套裝,套裝是把每一個分類的商品組合打包一塊兒賣。

image

每一個分類商品最多選一個,其餘的屬性跟商品是同樣的。

到這裏基本上咱們的換裝遊戲前端+管理系統就說完了。

image

附:

龍骨導出文件:
https://fcs-activity.oss-cn-beijing.aliyuncs.com/egretLeapDemo/mobbyDragonDemo.zip
感興趣的道友能夠試一下。

做者簡介

姚輝濤爲好將來前端開發工程師

---------- END ----------

招聘信息

好將來技術團隊正在測試、後臺、運維、大前端開發等高級工程師崗位,你們可微信搜索/掃描下方」好將來技術」公衆號查看其中的「技術招聘」欄目瞭解詳情,歡迎感興趣的夥伴加入咱們!

也許你還想看

如何實現一個翻頁筆插件

產研人的疫情戰事,沒有一點兒的喘息

DIY技術資訊抓取工具的實踐與研究

基於TPNN的兒童英語聲學模型訓練

相關文章
相關標籤/搜索