游戲腳本的實(shí)現(xiàn)(6) 摘要: 本篇是游戲腳本的實(shí)現(xiàn)(5)的續(xù)篇。
事實(shí)上,創(chuàng)建可接受腳本的游戲引擎對(duì)于大多數(shù)的游戲而言,將產(chǎn)生出一個(gè)非常開(kāi)放的源代碼以及高效率的項(xiàng)目。
游戲腳本的實(shí)現(xiàn)(5) 摘要: 本篇是游戲腳本的實(shí)現(xiàn)(4)的續(xù)篇。
add_script將行為列表框中選中的行為添加到腳本列表框中:
游戲腳本的實(shí)現(xiàn)(4) 摘要: 本篇是游戲腳本的實(shí)現(xiàn)(3)的續(xù)篇。
首先來(lái)看看WinMain函數(shù)以及主窗口處理過(guò)程的實(shí)現(xiàn):
游戲腳本的實(shí)現(xiàn)(3) 摘要:
MLS系統(tǒng)僅使用到數(shù)字:代表行為的編號(hào),隨后條目的數(shù)量,以及代表?xiàng)l目數(shù)據(jù)的編號(hào)。計(jì)算機(jī)特別擅長(zhǎng)處理數(shù)字的工作,但我們的需要更多。需要將腳本構(gòu)造成易于理解的文本行,并讓腳本編輯器將鍵入的文本轉(zhuǎn)變?yōu)槟_本系統(tǒng)可以處理的一系列數(shù)字。
在編輯一個(gè)腳本期間,并不處理任何數(shù)字方面的問(wèn)題,所以編輯器的工作還包括加載數(shù)字并將它們轉(zhuǎn)換回易于閱讀理解的文本行。因此,也可以這么說(shuō),僅需要使用一系列的文本命令構(gòu)造一個(gè)腳本,然后使用腳本編輯器將這些命令轉(zhuǎn)換成代表它們數(shù)值,反之亦然。
游戲腳本的實(shí)現(xiàn)(2) 摘要: 因?yàn)镋NREY_RULE結(jié)構(gòu)僅包含了行為和條目的規(guī)則,所以需要另外的結(jié)構(gòu)數(shù)組去存儲(chǔ)每個(gè)條目的數(shù)據(jù)。這些新的結(jié)構(gòu)包括了在條目中所使用的文本、布爾值、多重選項(xiàng),我們使用結(jié)構(gòu)體ENTRY來(lái)表示。
在處理腳本條目的過(guò)程中,當(dāng)一個(gè)腳本出現(xiàn)了許多條目時(shí),最麻煩的問(wèn)題也就接踵而來(lái)。腳本中的每個(gè)行為都要求一個(gè)相匹配的ENTRY_RULE結(jié)構(gòu),其依次包含了一定數(shù)量的ENTRY結(jié)構(gòu)。為了更好地處理一個(gè)腳本的結(jié)構(gòu),還需要其他的結(jié)構(gòu)來(lái)記錄屬于腳本行為的每個(gè)條目,我們將它命名為SCRPT。
游戲腳本的實(shí)現(xiàn)(1) 摘要:
創(chuàng)建一個(gè)角色扮演游戲項(xiàng)目時(shí),會(huì)發(fā)現(xiàn)在源碼中編寫(xiě)游戲相關(guān)信息十分困難(這樣做也是非常魯莽的)。最好的辦法就是使用外部數(shù)據(jù)源(類(lèi)似于程序的代碼),稱(chēng)之為游戲腳本(例如對(duì)話)。以這種方式,可以控制游戲的流程并節(jié)省寶貴的時(shí)間,因?yàn)椴恍枰诿看巫龀龈淖兒笾匦逻M(jìn)行編譯。
當(dāng)創(chuàng)建游戲時(shí),游戲腳本與所編寫(xiě)的程序代碼非常類(lèi)似,只是游戲腳本相對(duì)于游戲引擎而言是外部的。正因?yàn)樗鼈兪峭獠康模圆趴梢匝杆俚貙?duì)腳本做出更改,而不用重新編譯整個(gè)游戲引擎。否則對(duì)于一個(gè)超過(guò)100萬(wàn)行代碼的項(xiàng)目,僅僅為了改變一個(gè)對(duì)話行就要重新編譯整個(gè)項(xiàng)目。