深度剖析Python 腳本問(wèn)題
在開(kāi)發(fā)游戲時(shí)主要使用的Python 腳本主要有兩種方式,一種方式是主程序使用一門(mén)高級(jí)語(yǔ)言,比如C++進(jìn)行編寫(xiě),然后對(duì)其嵌入一個(gè)腳本解釋器,在運(yùn)行時(shí)動(dòng)態(tài)執(zhí)行一些腳本函數(shù)。
游戲企劃需要更多的時(shí)間來(lái)對(duì)游戲進(jìn)行調(diào)整,如果游戲邏輯還寫(xiě)在代碼中,則企劃對(duì)游戲的每次修改都要通過(guò)程序進(jìn)行,而且還需要重新編譯以及重啟程序,這樣工作效率就大大降低了。
在游戲中使用腳本,就正好能解決上述問(wèn)題,小到一些計(jì)算公式,大到游戲的控制流程都可以通過(guò)腳本完成,而且目前的腳本系統(tǒng)大多是解釋執(zhí)行的,因此都可以支持運(yùn)行時(shí)動(dòng)態(tài)修改,這樣一來(lái)可以立即看到修改結(jié)果,非常方便。
如何使用腳本在游戲中使用腳本主要有兩種方式。一種方式是主程序使用一門(mén)高級(jí)語(yǔ)言,比如C++進(jìn)行編寫(xiě),然后對(duì)其嵌入一個(gè)腳本解釋器,在運(yùn)行時(shí)動(dòng)態(tài)執(zhí)行一些腳本函數(shù);
另一種方式則是整個(gè)程序全部使用Python 腳本編寫(xiě),例如一些泥巴游戲就是直接用LPC腳本編寫(xiě)的。本文主要研究嵌入式腳本使用方法,因?yàn)槟壳按蟛糠值哪_本都不能提供如VC++那樣方便的調(diào)試環(huán)境。
如果程序全部用腳本編寫(xiě),當(dāng)腳本多達(dá)幾萬(wàn)行甚至十幾萬(wàn)行的時(shí)候,調(diào)試會(huì)成為一件非常痛苦的事。而且嵌入式使用時(shí)可以將一些非常耗時(shí)的代碼用C++編寫(xiě),以保持較好的運(yùn)行效率。
程序從C++的main( )函數(shù)開(kāi)始啟動(dòng),然后進(jìn)入主循環(huán),在一些C++函數(shù)中會(huì)直接調(diào)用腳本函數(shù),在腳本函數(shù)的運(yùn)行過(guò)程中,又可能調(diào)用C++的擴(kuò)展函數(shù)。C++擴(kuò)展函數(shù)的主要功能有兩個(gè):一是用來(lái)增加腳本無(wú)法直接編寫(xiě)的功能,二是用來(lái)替換腳本中運(yùn)行速度過(guò)慢的函數(shù)。#t#
上述過(guò)程的關(guān)鍵點(diǎn)就在于C++和腳本如何相互調(diào)用函數(shù),以及如何傳遞參數(shù)與結(jié)果。一般的解決方法是在程序啟動(dòng)時(shí)利用腳本的API向腳本注冊(cè)C++的擴(kuò)展函數(shù)。
將函數(shù)指針傳遞給腳本系統(tǒng)以便將來(lái)調(diào)用,調(diào)用腳本函數(shù)則使用腳本系統(tǒng)的API將調(diào)用參數(shù)壓進(jìn)棧,取得運(yùn)行結(jié)果也要通過(guò)API進(jìn)行。
Python 腳本簡(jiǎn)介目前有許多第三方腳本語(yǔ)言可供直接使用,例如Tcl、Lua等等,本文要介紹的是Python 腳本。Python已經(jīng)有超過(guò)十年的歷史,是一種解釋性的、面向?qū)ο蟮哪_本語(yǔ)言。Python的解釋器在大部分的操作系統(tǒng)上都可以運(yùn)行,如Windows、Linux、Solaris、Mac 等。
詳細(xì)的語(yǔ)法說(shuō)明請(qǐng)參考Python安裝包自帶的文檔,這里我只介紹一些常用的關(guān)鍵字與注意事項(xiàng)。Python沒(méi)有C++中的 { 和 } ,它使用縮進(jìn)來(lái)代替。變量不需要單獨(dú)聲明,但不能引用未經(jīng)賦值的變量。
Python中引入了模塊的概念,類(lèi)似C++中Library的概念。模塊可以包含函數(shù)、變量、類(lèi)。一個(gè)腳本文件就是一個(gè)模塊,模塊在使用前需要導(dǎo)入,Python中沒(méi)有switch,使用if判斷代替:
- if ( num==1 ):
 - print "1"
 - elif ( num==2 ):
 - print "2"
 - else:
 - print "unknown"
 - while 是Python的一個(gè)循環(huán)語(yǔ)句。在while循環(huán)內(nèi)可以使用continue跳到下個(gè)循環(huán),使用break可以跳出整個(gè)循環(huán):
 - cnt = 5
 - while ( cnt > 0 ):
 - print cnt
 - cnt -= 1
 - for 循環(huán):
 - list = ["test1", "test2", "test3"]
 - for str in list:
 















 
 
 
 
 
 
 