PVZ2國(guó)際版自制關(guān)卡教程第二彈——關(guān)卡框架
學(xué)會(huì)了JSON格式,接下來就可以正式進(jìn)入關(guān)卡制作環(huán)節(jié)了。下面是一個(gè)關(guān)卡的基本框架:
為了更清晰,作者這里使用了電腦,手機(jī)與電腦并沒有差別,但最后還是要在手機(jī)上游戲里測(cè)試。
代碼中
波浪號(hào)
或
未填入值的項(xiàng)
即需要根據(jù)關(guān)卡詳情填寫,下面我們來逐條解釋代碼的意思。
首先是總的花括號(hào)內(nèi):
#comment
是此關(guān)卡的標(biāo)題,但實(shí)際上和關(guān)卡沒有多大關(guān)系,可以隨便填,作用應(yīng)該是讓設(shè)計(jì)關(guān)卡的你區(qū)分每一個(gè)關(guān)卡,如填入:
"#comment": "Test1"
objects
是一個(gè)總的列表,其元素為每一個(gè)具體的關(guān)卡設(shè)置。可以看到列表里面有多個(gè)花括號(hào),每一個(gè)都對(duì)應(yīng)著設(shè)置,下面逐一解釋。
第一個(gè)花括號(hào)中:
objclass
固定填入
LevelDefinition
,可以相當(dāng)于這一設(shè)置的標(biāo)題。這項(xiàng)設(shè)置是用來設(shè)置關(guān)卡的常規(guī)內(nèi)容。
objdata
的值是一個(gè)花括號(hào)括起來的,即具體的設(shè)置。
objdata中:
Description
的值填入關(guān)卡描述,內(nèi)容會(huì)出現(xiàn)在剛進(jìn)入關(guān)卡時(shí)屏幕的下方,可以隨便填,如:
"Description":"A easy test"
LevelNumber
的值填入數(shù)字,即此關(guān)卡為第幾天,對(duì)關(guān)卡沒有太大影響。
Modules
的值是一個(gè)列表,規(guī)定的是游戲的玩法模式,會(huì)與下面的設(shè)置呼應(yīng),代碼中已有的三條是一般每個(gè)關(guān)卡必要的模式,決定了僵尸勝利的條件和生成的波次,無腦填入就好,具體的玩法模式及設(shè)置會(huì)在下一篇介紹。
Name
即關(guān)卡名,填入的值會(huì)在游戲進(jìn)行時(shí)顯示在屏幕上。如填入:
"Name":"Test1"
StartingSun
填入數(shù)字,用于設(shè)置初始陽(yáng)光數(shù)量,會(huì)受初始陽(yáng)光強(qiáng)化道具的加成。此條可以刪去,即使用默認(rèn)陽(yáng)光數(shù)。
StageModule
用于設(shè)置場(chǎng)景,填入值的格式是"RTID(世界名Stage@LevelModules)"如想要未來世界的場(chǎng)景即填入:
"StageModule":"RTID(FutureStage@LevelModules)"
注意大小寫。
第二個(gè)花括號(hào)中:
aliases
也可以理解為一個(gè)設(shè)置的標(biāo)題,它的值是一個(gè)中括號(hào),里面一般是寫著對(duì)應(yīng)的游戲模式。如這里的"NewWaves"就對(duì)應(yīng)了游戲模式中的"RTID(NewWaves@CurrentLevel)"
objclass和objdata
在這一項(xiàng)設(shè)置填入的值是固定的,抄上去即可,注意寫objdata時(shí)別忘了它的值是一個(gè)花括號(hào)。
第三個(gè)花括號(hào)中:
這條設(shè)置是對(duì)波次的常規(guī)設(shè)置。
aliases和objclass
固定。
objdata中:
FlagWaveInterval
的值填入數(shù)字,是規(guī)定每幾波出現(xiàn)大波。如總共有10波,填入5則第5波和第10波會(huì)有大波提示。
MaxNextWaveHealthPercentage和Min…
是規(guī)定場(chǎng)上僵尸總生命值降低至原總生命值的百分之多少時(shí)出現(xiàn)下一波僵尸,一般不去改動(dòng)??梢蕴钊胄?shù)如0.55即55%。
WaveCount
的值填入數(shù)字,即一共有幾波僵尸。
Waves
的值是一個(gè)列表,其元素格式都是["RTID(Wave~@CurrentLevel)"],波浪號(hào)填入數(shù)字,代表這是第幾波,WaveCount的值是多少,就要寫到多少波。如:
"WaveCount":3,
"Waves":[
[ "RTID(Wave1@CurrentLevel)" ], [ "RTID(Wave2@…)" ], [ "RTID(Wave3@…)" ]
]
ZombieCountdownFirstWaveSecs
的值填入數(shù)字,決定從開始游戲到第一波僵尸到來的時(shí)間,單位是秒。
接下來就是對(duì)波次的具體設(shè)置:
可以這樣寫:
aliases
中的波浪號(hào)填入數(shù)字,即這一項(xiàng)設(shè)置是對(duì)第幾波的設(shè)置。Wave1就是對(duì)第一波的設(shè)置。
objclass
填入的值表示從右方出僵尸(常規(guī)出怪)。
objdata中:
AdditionalPlantfood
填入數(shù)字,表示此波帶有多少葉綠素。
Zombies
是一個(gè)列表,每個(gè)元素就是具體的每個(gè)僵尸,元素的格式都是:
{
"Row": 數(shù)值, "Type": "RTID(~@ZombieTypes)"
}
Row
為僵尸出現(xiàn)的行,從上到下依次是一二三四五行,刪去則隨機(jī)。
Type
即僵尸種類,波浪號(hào)填僵尸名。
如在第二行出一個(gè)鋼琴家僵尸:
{
"Row":2,
"Type":"RTID(piano@ZombieTypes)"
}
最后是
version
,似乎與關(guān)卡沒有關(guān)系,但必須寫上,值為1即可,注意其所在位置,是與
objects
同級(jí)的。
至此,一個(gè)關(guān)卡的模型就出來了,可以試試自定義出怪了。將自制的關(guān)卡文件替換原來的關(guān)卡,注意文件名,比如文件名為EGYPT1,就替換了原來的埃及第一天,埃及第一天就是你自制的關(guān)卡了。要是替換后游戲閃退,則是格式出了問題,檢查有沒有少了逗號(hào)或雙引號(hào)。若游戲進(jìn)得去但關(guān)卡閃退,則是填入的值出現(xiàn)了問題,排除錯(cuò)誤后,成功進(jìn)入關(guān)卡,就可以游玩自制的關(guān)卡了。
但你很快發(fā)現(xiàn),關(guān)卡沒有讓你選植物,也沒有給定植物,沒法玩。這是因?yàn)橛螒蚰J讲]有選植物模式,在下一篇會(huì)依次介紹游戲模式和對(duì)應(yīng)的設(shè)置,讓你的富有創(chuàng)意的自制關(guān)卡完整起來。此篇就到這里,下一篇見~