MMORPG如何設(shè)計(jì)背包系統(tǒng)
MMORPG游戲中背包系統(tǒng)是很重要的一個(gè)模塊, 大部分的背包系統(tǒng)的講解,都是講如何設(shè)計(jì)UI,如何顯示這些,其實(shí)這些東西并不是背包系統(tǒng)的核心,接下來我們來分析一下背包系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)如何設(shè)計(jì),能讓策劃和程序很好的工作,以及非常方便的擴(kuò)展。
?
1: 設(shè)計(jì)好背包系統(tǒng)的關(guān)鍵是什么?
背包其實(shí)就是描述一個(gè)玩家在游戲世界當(dāng)中擁有哪些物品,一個(gè)大型的MMORPG游戲會(huì)有很多的裝備和物品, 這些裝備和物品以及數(shù)值經(jīng)常會(huì)修改,增加,減少, 甚至裝備上可以鑲嵌各種寶石來實(shí)現(xiàn)不同的攻擊和防御。所以如何設(shè)計(jì)一套數(shù)據(jù)組織的方式能方便程序和策劃溝通,才是做好背包系統(tǒng)的關(guān)鍵,并不是如何做好背包系統(tǒng)的UI界面。
?
2: 背包系統(tǒng)物品需求分析
背包系統(tǒng)中的物品分為2個(gè)部分,第一部分是物品的屬性描述,第二部分是玩家在游戲里面擁有物品的數(shù)量,第一個(gè)部分就是策劃要填寫的內(nèi)容,有哪些物品,這些物品會(huì)有哪些屬性等,同時(shí)程序在使用裝備的時(shí)候, 去讀取里面的數(shù)據(jù)屬性值來參與程序計(jì)算。第二部分就是程序要做的事情,當(dāng)玩家在游戲中獲得了某個(gè)物品或裝備的時(shí)候,就更新裝備的數(shù)量到數(shù)據(jù)庫,程序負(fù)責(zé)維護(hù)好這個(gè)數(shù)據(jù)邏輯。
?
3: 如何設(shè)計(jì)好背包物品的數(shù)據(jù)屬性配置
背包物品的數(shù)據(jù)屬性一般是由策劃來處理的,我們要設(shè)計(jì)好一種方式來讓程序和策劃很好的工作。
策劃負(fù)責(zé)填寫表格,程序負(fù)責(zé)使用表格。如何設(shè)計(jì)好呢?我們可以把物品分成一些類型,比如藥水類型,紅藍(lán)藥水能夠增加玩家的HP與MP。又如裝備類型,某個(gè)裝備有攻擊力,防御力等。這么多物品,很容易讓程序員懵逼,這么多類型與復(fù)雜數(shù)據(jù)屬性如何設(shè)計(jì)呢?其實(shí)仔細(xì)分析一下,我們很容易把內(nèi)在的邏輯設(shè)計(jì)清楚。
先來分析一個(gè)物品的描述,一個(gè)物品在邏輯上包含了兩個(gè)部分,第一部分是文字描述,如"紅藥水可以增加玩家的200HP",第二部分屬于數(shù)值描述比如藥水類物品的數(shù)值[HP, MP, 售價(jià)等]。那么我們就可以設(shè)計(jì)藥水的屬性配置表如下:
物品id desic(文本描述) HP, MP, BuyPrice[購買價(jià)格], SellPrice[出售價(jià)格]
那么如果是裝備呢?裝備是防御力,攻擊力等屬性,藥水的描述就不適用了,我們就要建立另外的描述表如下:
物品id desic(文本描述) Attack Define BuyPrice[購買價(jià)格], SellPrice[出售價(jià)格]
這樣我們很自然的按照物品的數(shù)值屬性進(jìn)行物品分類,把每一類物品做成屬性描述表,例如藥水描述表,裝備描述表,武器描述表, 可以根據(jù)游戲的需求,定義一類物品的屬性。
這些屬性配置表在做背包顯示的時(shí)候,能提示物品的屬性和特點(diǎn),在計(jì)算數(shù)據(jù)的時(shí)候能疊加他們的數(shù)值到游戲中。策劃隨時(shí)可以增加物品類型,修改物品的屬性,增加后馬上就可以使用,這樣程序和策劃就能很好的溝通,策劃做數(shù)值也方便。
物品id 是對(duì)應(yīng)的此物品唯一的ID號(hào),背包里面, 我們都是以id號(hào)來標(biāo)識(shí)物品的,那么給特定一個(gè)ID號(hào),如何知道到底是那種類型呢?這里有一個(gè)技巧,就是我們把每種類型的物體的ID劃分一個(gè)范圍,比如藥水, [100001~199999], 武器[200001~299999], 衣服裝備[300001~399999]。這樣規(guī)定好以后,當(dāng)知道某個(gè)物品的ID,我們就可以通過 ID整除100000 類型, 300001/ 100001 = 3 所以300001屬于衣服裝備。
?
4: 程序如何存放玩家擁有的物品?
一般游戲里面會(huì)做一個(gè)數(shù)據(jù)表存在服務(wù)器上, 這個(gè)數(shù)據(jù)表描述了某個(gè)玩家有哪些物品以及物品的數(shù)目。數(shù)據(jù)表的設(shè)計(jì)如下:
PlayerID(玩家ID) ItemID(物品ID) Count(物品數(shù)目)
00001 300001 5
00001 200005 15
當(dāng)我們要顯示00001玩家背包數(shù)據(jù)的時(shí)候,可以通過查詢語句把所有的 00001玩家的所有的物品以及數(shù)量拉取下來(Select * from 背包數(shù)據(jù)表 whre PlayerID = 00001 and Count > 0) ,再加上配置表的屬性描述等,這樣背包就做好了。
這里還有一個(gè)問題, 有些特殊的裝備,可以鑲嵌不同的寶石,得到不同的攻擊力和防御力, 這種我們?cè)趺醋瞿??而鑲嵌寶石,是玩家操作處理的,這個(gè)時(shí)候,我們可以在后面再加一個(gè)屬性表, 用來存放我們配置好的寶石等數(shù)據(jù) json文本或二進(jìn)制數(shù)據(jù),如 { 卡槽1: 寶石1, 卡槽2: 寶石3 }。
數(shù)據(jù)表變成:
PlayerID(玩家ID) ItemID(物品ID) Count(物品數(shù)目) Props(JSON or 二進(jìn)制)
?
這樣設(shè)計(jì)后,我們游戲的物品與背包設(shè)計(jì)就變得非常的簡單和清晰,希望今天的分享對(duì)大家有所幫助。
我的學(xué)習(xí)交流Q群425-908-678 ,里面有更多學(xué)習(xí)資料與素材源碼,歡迎進(jìn)群領(lǐng)取