本發(fā)明涉及計(jì)算機(jī)軟件技術(shù)領(lǐng)域,尤其涉及一種客戶端圖形用戶界面快速創(chuàng)建的方法。
背景技術(shù):
用戶界面,是指系統(tǒng)與用戶進(jìn)行信息交換的媒介,是用戶操作硬件達(dá)成雙向交互、借助硬件完成工作的重要渠道。計(jì)算機(jī)從早期的只能被少數(shù)專業(yè)人士使用發(fā)展到現(xiàn)在的廣泛應(yīng)用于人們生活的各領(lǐng)域,從命令行用戶界面向圖形用戶界面的轉(zhuǎn)變起了至關(guān)重要的作用。
圖形用戶界面(Graphical User Interface,簡(jiǎn)稱GUI),是一種使用戶與硬件間的通信更加便利的界面顯示格式,它允許用戶通過(guò)圖標(biāo)或菜單選項(xiàng),直觀、快捷地完成操作任務(wù)。圖形用戶界面功能的實(shí)現(xiàn),是一個(gè)軟件開發(fā)和其在計(jì)算機(jī)設(shè)備上運(yùn)行的過(guò)程。一般,復(fù)雜的圖形用戶界面,例如游戲(特別是手機(jī)游戲)等,往往采用開源的GUI系統(tǒng)開發(fā),如CEGUI系統(tǒng)。
圖形用戶界面開發(fā)完成后,通常會(huì)以XML、JSON等這一類使用結(jié)構(gòu)化方法標(biāo)記數(shù)據(jù)的文本格式保存,在客戶端運(yùn)行時(shí),通過(guò)讀取和解析上述圖形用戶界面存儲(chǔ)文件以實(shí)現(xiàn)在PC、手機(jī)等計(jì)算機(jī)設(shè)備上創(chuàng)建該圖形用戶界面,進(jìn)而實(shí)現(xiàn)其功能。
一個(gè)復(fù)雜的圖形用戶界面,以手機(jī)游戲的圖形用戶界面為例,其通常是由頂層窗口和其所包含的一個(gè)或多個(gè)子窗口構(gòu)成,子窗口又可以擁有子窗口,形成一個(gè)復(fù)雜的層級(jí)結(jié)構(gòu)。當(dāng)圖形界面編輯器將制作好的圖形用戶界面存儲(chǔ)為文本格式(即使用了結(jié)構(gòu)化方法標(biāo)記數(shù)據(jù)的文本格式)時(shí),以XML為例,每一個(gè)窗口存儲(chǔ)到一個(gè)XML節(jié)點(diǎn)中,窗口的屬性存儲(chǔ)到該節(jié)點(diǎn)的屬性中;其中,頂層窗口存儲(chǔ)到該節(jié)點(diǎn)中,子級(jí)窗口則存儲(chǔ)到頂層窗口節(jié)點(diǎn)的子節(jié)點(diǎn)中,形成層級(jí)(也稱樹狀)的XML結(jié)構(gòu)(參見圖1)。在圖1中,每一個(gè)Window(即窗口)就是一個(gè)XML節(jié)點(diǎn),Window后面Type字段存儲(chǔ)了它的類型,Name字段則是該窗口的名稱,可在游戲中用作查詢?cè)摯翱诘奈ㄒ粯?biāo)識(shí);Window下方縮進(jìn)的行是Window的子節(jié)點(diǎn),其中Property存儲(chǔ)Window的屬性(包括名稱和值),縮進(jìn)的Window,是子窗口;如此嵌套,形成層級(jí)結(jié)構(gòu)。當(dāng)客戶端應(yīng)用時(shí),則從上述文件結(jié)構(gòu)的存儲(chǔ)文本中解析和在設(shè)備上創(chuàng)建界面,其實(shí)現(xiàn)過(guò)程為,通過(guò)XML解析器(即對(duì)應(yīng)的存儲(chǔ)文件文本格式解析器)獲得該XML文件的所有節(jié)點(diǎn)和屬性,依據(jù)節(jié)點(diǎn)和屬性在設(shè)備上創(chuàng)建出Window對(duì)象,再根據(jù)節(jié)點(diǎn)的層級(jí)關(guān)系設(shè)定這些Window對(duì)象的父子節(jié)點(diǎn)關(guān)系,最終獲得該XML文件存儲(chǔ)內(nèi)容記錄的界面。
XML格式便于開發(fā)者閱讀和修改,但并不適合計(jì)算機(jī)設(shè)備解析。XML在解析過(guò)程中,由于涉及大量的字符串比較、解析和節(jié)點(diǎn)遍歷,效率低下,容易出現(xiàn)卡頓等問(wèn)題,影響用戶體驗(yàn)。
技術(shù)實(shí)現(xiàn)要素:
面對(duì)上述情況及其存在的問(wèn)題,如果將圖形用戶界面的存儲(chǔ)數(shù)據(jù)以一種更能被計(jì)算機(jī)設(shè)備迅速讀取解析的格式,可以在一定程度上提高圖形用戶界面在計(jì)算機(jī)設(shè)備上的創(chuàng)建速度,避免效率低下及卡頓等問(wèn)題。相較于XML等文本文件,二進(jìn)制文件不僅可節(jié)省空間,而且能夠快速地被計(jì)算機(jī)設(shè)備讀取。但是,一個(gè)復(fù)雜的圖形用戶界面,特別是手機(jī)游戲等這一類復(fù)雜的圖形用戶界面,其存儲(chǔ)文件存在著復(fù)雜的層狀結(jié)構(gòu),加之手機(jī)游戲等這類圖形用戶界面自身的特點(diǎn),其存儲(chǔ)文件轉(zhuǎn)化為二進(jìn)制文件的過(guò)程也非簡(jiǎn)單的XML、JSON等這一類使用結(jié)構(gòu)化方法標(biāo)記數(shù)據(jù)的文本格式文件向二進(jìn)制文件轉(zhuǎn)化的過(guò)程。同時(shí),在圖形用戶界面的創(chuàng)建過(guò)程中,讀取二進(jìn)制文件創(chuàng)建圖形用戶界面的方法也區(qū)別于傳統(tǒng)的讀取、解析XML等這一類文本文件創(chuàng)建圖形用戶界面的方法。因此,為解決上述問(wèn)題,本發(fā)明提供一種以二進(jìn)制文件格式存儲(chǔ)的客戶端圖形用戶界面的創(chuàng)建方法。
本發(fā)明提供一種客戶端圖形用戶界面快速創(chuàng)建的方法,該方法通過(guò)獲取并反序列化存儲(chǔ)圖形用戶界面信息的二進(jìn)制文件,以此來(lái)創(chuàng)建其所存儲(chǔ)的圖形用戶界面,在一定程度上提高圖形用戶界面在計(jì)算機(jī)設(shè)備上的創(chuàng)建速度,避免了現(xiàn)有技術(shù)中使用XML、JSON等這一類使用結(jié)構(gòu)化方法標(biāo)記數(shù)據(jù)的文本格式文件存儲(chǔ)在圖形用戶界面創(chuàng)建時(shí)該類型存儲(chǔ)文件解析效率低下、容易出現(xiàn)圖形用戶界面卡頓的問(wèn)題。特別是游戲(如手機(jī)游戲),其對(duì)每秒幀數(shù)要求較高,其圖形用戶界面頻繁解析加載,更需要這種快速創(chuàng)建的方法。
本發(fā)明實(shí)施例提供一種客戶端圖形用戶界面快速創(chuàng)建的方法,該方法包括:
S1根據(jù)文件標(biāo)識(shí)獲取存儲(chǔ)圖形用戶界面信息的二進(jìn)制文件;
所述二進(jìn)制文件是根據(jù)圖形用戶界面存儲(chǔ)文件進(jìn)行二進(jìn)制轉(zhuǎn)化獲得;所述圖形用戶界面存儲(chǔ)文件是以XML、JSON等這一類使用結(jié)構(gòu)化方法標(biāo)記數(shù)據(jù)的文本格式存儲(chǔ);所述二進(jìn)制文件包括文本標(biāo)識(shí)、版本信息、節(jié)點(diǎn)類型及節(jié)點(diǎn)內(nèi)容等;
S2根據(jù)所述二進(jìn)制文件中的版本信息獲取與之對(duì)應(yīng)的反序列化器組;每個(gè)文件版本,都有一組與其對(duì)應(yīng)的反序列化組;
S3通過(guò)所述反序列化器組中的反序列化器從頂層窗口節(jié)點(diǎn)起逐層節(jié)點(diǎn)反序列化所述二進(jìn)制文件,創(chuàng)建其所記載的圖形用戶界面;具體地,
從頂層窗口節(jié)點(diǎn),根據(jù)其節(jié)點(diǎn)類型反序列化當(dāng)前層節(jié)點(diǎn),該節(jié)點(diǎn)反序列化完成后,判斷該層節(jié)點(diǎn)是否仍有子節(jié)點(diǎn)未被序列化,即判斷逐層反序列化進(jìn)程是否完成,若是,則退出所述逐層反序列化進(jìn)程,若否,則進(jìn)一步反序列化所述子節(jié)點(diǎn),如此逐層反序列化直至全部節(jié)點(diǎn)被反序列化。
進(jìn)一步,上述方法中,所述二進(jìn)制文件中,
所述文件標(biāo)識(shí),標(biāo)識(shí)客戶端中的文件是否屬于所述二進(jìn)制文件;
所述版本信息,標(biāo)記當(dāng)前版本信息;不同版本信息對(duì)應(yīng)不同的反序列化器組;
所述節(jié)點(diǎn),是指所述二進(jìn)制文件中圖形用戶界面信息的基本存儲(chǔ)單位;所述節(jié)點(diǎn)按照類型分為窗口、自動(dòng)窗口、引用文件、事件等;
此外,所述圖形用戶界面的存儲(chǔ)文件通常是由開發(fā)者通過(guò)GUI系統(tǒng)開發(fā)圖形用戶界面并序列化保存獲得,或通過(guò)自行開發(fā)編寫獲得;進(jìn)一步,所述的GUI系統(tǒng),優(yōu)選為面向?qū)ο笤O(shè)計(jì)的GUI開發(fā)系統(tǒng),如CEGUI系統(tǒng);
進(jìn)一步,根據(jù)其節(jié)點(diǎn)類型反序列化當(dāng)前層節(jié)點(diǎn),其中,
當(dāng)所述節(jié)點(diǎn)類型為窗口時(shí),所述節(jié)點(diǎn)內(nèi)容為窗口及窗口中控件的信息;其反序列化過(guò)程為,窗口反序列化器調(diào)取窗口,然后從所述窗口信息中讀取其屬性信息并據(jù)此設(shè)置所述窗口,控件反序列化器調(diào)取對(duì)應(yīng)的控件,然后從所述控件信息中讀取其屬性信息并據(jù)此設(shè)置所述控件;
當(dāng)所述節(jié)點(diǎn)類型為自動(dòng)窗口時(shí),所述自動(dòng)窗口為已創(chuàng)建窗口,不需要窗口反序列化器再創(chuàng)建,此時(shí),所述節(jié)點(diǎn)內(nèi)容為窗口及窗口中控件的信息;其反序列化過(guò)程為,窗口反序列化器從所述窗口信息中讀取其屬性信息并據(jù)此設(shè)置所述自動(dòng)窗口,控件反序列化器調(diào)取對(duì)應(yīng)的控件,然后從所述控件信息中讀取其屬性信息并據(jù)此設(shè)置所述控件;
當(dāng)所述節(jié)點(diǎn)類型為引用文件時(shí),所述節(jié)點(diǎn)內(nèi)容則為所述引用文件的地址;其反序列化過(guò)程為,根據(jù)所述地址獲取所述引用文件,并跳轉(zhuǎn)執(zhí)行步驟S1;
當(dāng)所述節(jié)點(diǎn)類型為事件時(shí),所述節(jié)點(diǎn)內(nèi)容為事件信息;其反序列化過(guò)程為,讀取所述事件信息,設(shè)置所述事件;運(yùn)行中,若觸發(fā)該事件,則調(diào)用其處理函數(shù);
再進(jìn)一步,所述控件,根據(jù)圖形用戶界面窗口中常見的元素,一般包括文本、按鈕、滾動(dòng)窗口等控件;所述控件反序列化器反序列化對(duì)應(yīng)的控件,具體地,
當(dāng)所述控件為文本時(shí),文本型反序列化器調(diào)用文本框控件,然后從所述控件信息中讀取所述文本框的文本內(nèi)容、字體名稱、字號(hào)等屬性信息,并據(jù)此設(shè)置所述文本框控件;
若所述文本框?yàn)檩斎肟?,則所述文本內(nèi)容為空或顯示提示性文字;
當(dāng)所述控件為按鈕時(shí),按鈕型反序列化器調(diào)用按鈕框控件,然后從所述控件信息中讀取所述按鈕的按鈕狀態(tài)等屬性信息,并據(jù)此設(shè)置所述按鈕控件;所述按鈕狀態(tài)通常包括未按下、按下和/或禁用狀態(tài);
當(dāng)所述控件為滾動(dòng)窗口時(shí),窗口型反序列化器調(diào)用窗口,然后從所述控件信息中讀取滾動(dòng)區(qū)域等屬性信息,并據(jù)此設(shè)置所述滾動(dòng)窗口控件。
由于游戲(如手機(jī)游戲)對(duì)每秒幀數(shù)要求較高,其圖形用戶界面頻繁解析加載,上述方法,尤其適用于游戲(如手機(jī)游戲)的圖形用戶界面的快速創(chuàng)建。
本發(fā)明通過(guò)獲取并反序列化存儲(chǔ)圖形用戶界面信息的二進(jìn)制文件,以此來(lái)創(chuàng)建其所存儲(chǔ)的圖形用戶界面,在一定程度上提高圖形用戶界面在計(jì)算機(jī)設(shè)備上的創(chuàng)建速度,避免了現(xiàn)有技術(shù)中使用XML、JSON等這一類使用結(jié)構(gòu)化方法標(biāo)記數(shù)據(jù)的文本格式文件存儲(chǔ)在圖形用戶界面創(chuàng)建時(shí)該類型存儲(chǔ)文件解析效率低下、容易出現(xiàn)界面卡頓的問(wèn)題,大大提升了用戶體驗(yàn)。
附圖說(shuō)明
圖1為以XML文本格式保存的圖形用戶界面文件的一部分內(nèi)容的示例;
圖2為本發(fā)明實(shí)施例提供一種客戶端圖形用戶界面快速創(chuàng)建的方法的流程示意圖;
圖3為在實(shí)施例2基礎(chǔ)上公開的一種客戶端圖形用戶界面快速創(chuàng)建的程序流程示意圖。
具體實(shí)施方式
為使本發(fā)明實(shí)施例的目的、技術(shù)方案和取得的有益效果更加清楚,下面結(jié)合附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地表述。但是應(yīng)當(dāng)理解,此處描述的實(shí)施例僅用于說(shuō)明和解釋本發(fā)明,并不用于限定本發(fā)明?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域的技術(shù)人員在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
本發(fā)明實(shí)施例提供一種客戶端圖形用戶界面快速創(chuàng)建的方法,如圖2所示,該方法包括:
S1根據(jù)文件標(biāo)識(shí)獲取存儲(chǔ)圖形用戶界面信息的二進(jìn)制文件;
所述二進(jìn)制文件是根據(jù)圖形用戶界面存儲(chǔ)文件進(jìn)行二進(jìn)制轉(zhuǎn)化獲得;所述圖形用戶界面存儲(chǔ)文件是以XML、JSON等這一類使用結(jié)構(gòu)化方法標(biāo)記數(shù)據(jù)的文本格式存儲(chǔ);所述二進(jìn)制文件包括文本標(biāo)識(shí)、版本信息、節(jié)點(diǎn)類型及節(jié)點(diǎn)內(nèi)容等;
S2根據(jù)所述二進(jìn)制文件中的版本信息獲取與之對(duì)應(yīng)的反序列化器組;每個(gè)文件版本,都有一組與其對(duì)應(yīng)的反序列化組;
S3通過(guò)所述反序列化器組中的反序列化器從頂層窗口節(jié)點(diǎn)起逐層節(jié)點(diǎn)反序列化所述二進(jìn)制文件,創(chuàng)建其所記載的圖形用戶界面;
進(jìn)一步,所述圖形用戶界面的存儲(chǔ)文件由開發(fā)者通過(guò)GUI系統(tǒng)開發(fā)圖形用戶界面并序列化保存獲得,或通過(guò)自行開發(fā)編寫獲得;再進(jìn)一步,所述的GUI系統(tǒng),優(yōu)選為面向?qū)ο笤O(shè)計(jì)的GUI開發(fā)系統(tǒng),如CEGUI系統(tǒng);
進(jìn)一步,所述二進(jìn)制文件中,
所述文件標(biāo)識(shí),標(biāo)識(shí)客戶端中的文件是否屬于所述二進(jìn)制文件,例如,定義文件中的首段字節(jié)為文件標(biāo)識(shí),比如定義文件中首4個(gè)字節(jié)為文件標(biāo)識(shí),其中二進(jìn)制文件標(biāo)識(shí)為L(zhǎng)BFM,即Layout Binary File Magic的縮寫;
所述版本信息,標(biāo)記當(dāng)前版本信息;不同版本信息對(duì)應(yīng)不同的反序列化器組;通常版本信息通常由幾段字母數(shù)字組成,如V1.1.0.31,并以整形數(shù)據(jù)格式存儲(chǔ);
所述節(jié)點(diǎn),是指所述二進(jìn)制文件中圖形用戶界面信息的基本存儲(chǔ)單位;所述節(jié)點(diǎn)按照類型分為窗口、自動(dòng)窗口、引用文件、事件等;所述節(jié)點(diǎn)類型也以整形數(shù)據(jù)格式存儲(chǔ);比如定義0為窗口、1為自動(dòng)窗口、2引用文件、3為事件;
在本發(fā)明公開的一些實(shí)施例中,在上述實(shí)施例基礎(chǔ)上,如圖3所示,
從頂層窗口節(jié)點(diǎn),根據(jù)其節(jié)點(diǎn)類型反序列化當(dāng)前層節(jié)點(diǎn),該節(jié)點(diǎn)反序列化完成后,判斷該層節(jié)點(diǎn)是否仍有子節(jié)點(diǎn)未被序列化,即判斷逐層反序列化進(jìn)程是否完成,若是,則退出所述逐層反序列化進(jìn)程,若否,則進(jìn)一步反序列化所述子節(jié)點(diǎn),如此逐層反序列化直至全部節(jié)點(diǎn)被反序列化;
進(jìn)一步,根據(jù)其節(jié)點(diǎn)類型反序列化當(dāng)前層節(jié)點(diǎn),其中,
當(dāng)所述節(jié)點(diǎn)類型為窗口時(shí),所述節(jié)點(diǎn)內(nèi)容為窗口及窗口中控件的信息;其反序列化過(guò)程為,窗口反序列化器調(diào)取窗口,然后從所述窗口信息中讀取其屬性信息并據(jù)此設(shè)置所述窗口,控件反序列化器調(diào)取對(duì)應(yīng)的控件,然后從所述控件信息中讀取其屬性信息并據(jù)此設(shè)置所述控件;
當(dāng)所述節(jié)點(diǎn)類型為自動(dòng)窗口時(shí),所述自動(dòng)窗口為已創(chuàng)建窗口,不需要窗口反序列化器再創(chuàng)建,此時(shí),所述節(jié)點(diǎn)內(nèi)容為窗口及窗口中控件的信息;其反序列化過(guò)程為,窗口反序列化器從所述窗口信息中讀取其屬性信息并據(jù)此設(shè)置所述自動(dòng)窗口,控件反序列化器調(diào)取對(duì)應(yīng)的控件,然后從所述控件信息中讀取其屬性信息并據(jù)此設(shè)置所述控件;
當(dāng)所述節(jié)點(diǎn)類型為引用文件時(shí),所述節(jié)點(diǎn)內(nèi)容則為所述引用文件的地址;其反序列化過(guò)程為,根據(jù)所述地址獲取所述引用文件,并跳轉(zhuǎn)執(zhí)行步驟S1;
當(dāng)所述節(jié)點(diǎn)類型為事件時(shí),所述節(jié)點(diǎn)內(nèi)容為事件信息;其反序列化過(guò)程為,讀取所述事件信息,設(shè)置所述事件;運(yùn)行中,若觸發(fā)該事件,則調(diào)用其處理函數(shù);
再進(jìn)一步,所述控件,根據(jù)圖形用戶界面窗口中常見的元素,一般包括文本、按鈕、滾動(dòng)窗口等控件;所述控件反序列化器反序列化對(duì)應(yīng)的控件,具體地,
當(dāng)所述控件為文本時(shí),文本型反序列化器調(diào)用文本框控件,然后從所述控件信息中讀取所述文本框的文本內(nèi)容、字體名稱、字號(hào)等屬性信息,并據(jù)此設(shè)置所述文本框控件;
若所述文本框?yàn)檩斎肟颍瑒t所述文本內(nèi)容為空或顯示提示性文字;
當(dāng)所述控件為按鈕時(shí),按鈕型反序列化器調(diào)用按鈕框控件,然后從所述控件信息中讀取所述按鈕的按鈕狀態(tài)等屬性信息,并據(jù)此設(shè)置所述按鈕控件;所述按鈕狀態(tài)通常包括未按下、按下和/或禁用狀態(tài);
當(dāng)所述控件為滾動(dòng)窗口時(shí),窗口型反序列化器調(diào)用窗口,然后從所述控件信息中讀取滾動(dòng)區(qū)域等屬性信息,并據(jù)此設(shè)置所述滾動(dòng)窗口控件。
由于游戲(如手機(jī)游戲)對(duì)每秒幀數(shù)要求較高,其圖形用戶界面頻繁解析加載,上述方法,尤其適用于游戲(如手機(jī)游戲)的圖形用戶界面的快速創(chuàng)建。
上述實(shí)施例通過(guò)獲取并反序列化存儲(chǔ)圖形用戶界面信息的二進(jìn)制文件,以此來(lái)創(chuàng)建其所存儲(chǔ)的圖形用戶界面,在一定程度上提高圖形用戶界面在計(jì)算機(jī)設(shè)備上的創(chuàng)建速度,避免了現(xiàn)有技術(shù)中使用XML、JSON等這一類使用結(jié)構(gòu)化方法標(biāo)記數(shù)據(jù)的文本格式文件存儲(chǔ)在圖形用戶界面創(chuàng)建時(shí)該類型存儲(chǔ)文件解析效率低下、容易出現(xiàn)界面卡頓的問(wèn)題,大大提升了用戶體驗(yàn)。
最后應(yīng)說(shuō)明的是:以上實(shí)施例僅用于說(shuō)明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡管參照前述實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的精神和范圍。