漫長(zhǎng)的等待之后,Boost 1.34終于浮出水面。趁著下載的時(shí)間,看看這次 boost.org 帶來(lái)了哪些大禮吧!
Foreach Library 用于簡(jiǎn)化對(duì)一個(gè)序列中的所有元素進(jìn)行迭代(比 std::for_each 更優(yōu)雅哦,Simplicity is Beauty 嘛 )。
StateChart Library 用于簡(jiǎn)化任意復(fù)雜度的狀態(tài)機(jī)的實(shí)現(xiàn)。這應(yīng)該是游戲開(kāi)發(fā)者的福音了。相比于從前用晦澀的 C Macro
來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的狀態(tài)機(jī)語(yǔ)言,這個(gè)庫(kù)強(qiáng)調(diào)了“easily readable and maintainable C++
code”。唯一疑問(wèn)是,不知此庫(kù)性能如何,有待來(lái)日細(xì)查。
Typeof Library
相信大家對(duì)新標(biāo)準(zhǔn)中可能出現(xiàn)的 typeof 和 auto 這兩個(gè)關(guān)鍵字一定很期待吧。這里 boost 提供了 typeof 和 auto
的庫(kù)實(shí)現(xiàn),在新標(biāo)準(zhǔn)普及前的很長(zhǎng)一段時(shí)間,我們可以先用它們減少擊鍵次數(shù)(當(dāng)然,還是關(guān)鍵字來(lái)得踏實(shí):))
Xpressive Library 提供了更高階的正則表達(dá)式支持。此庫(kù)融合了 boost.regex 和 Spirit Parser
Framework 的優(yōu)點(diǎn)。以 C++
表達(dá)式來(lái)編寫正則表達(dá)式,好處是可以在編譯期獲悉語(yǔ)法的合法性,而且以這種方式表達(dá)的正則表達(dá)式可以互相引用,不像原先的 boost.regex,
只能在運(yùn)行時(shí)進(jìn)行語(yǔ)法檢查和各種處理。
最后的重頭戲應(yīng)該是眾望所歸的 std::tr1
了。雖然等到大眾普及至少還要兩三年,但想想這些即將標(biāo)準(zhǔn)化的詞匯就讓人心動(dòng)(Reference Wrappers, Smart
Pointers, result_of, Function Object Binders, Polymorphic function
wrappers, Type Traits, Random Number Generators and Distributions,
Tuples, Fixed Size Array, Hash Function Objects, Regular Expressions,
and Complex Number Additional Algorithms.)
此外還有不少原有庫(kù)的更新,這里暫不細(xì)表。我這兒已經(jīng)下載完畢,大快朵頤去也:)
Jul.25, 2006
?關(guān)于場(chǎng)景管理有了一些頭緒,總算走出了被“選用哪種形式的場(chǎng)景管理”所困擾的煩惱。認(rèn)識(shí)到場(chǎng)景的組織最關(guān)鍵的是應(yīng)該以“邏輯層次+幾何結(jié)構(gòu)”來(lái)組織。加速渲染,對(duì)象剔除,碰撞檢測(cè)都只是場(chǎng)景所應(yīng)具有的功能,應(yīng)該在不同的層次上區(qū)別的處理,而不能單純的指望用一個(gè)“最優(yōu)”的場(chǎng)景管理數(shù)據(jù)結(jié)構(gòu)或算法來(lái)通吃。
?當(dāng)前的處理方式是用樹(shù)來(lái)維持所有對(duì)象(層次間的關(guān)系以邏輯為主,幾何結(jié)構(gòu)為輔),每個(gè)節(jié)點(diǎn)上存儲(chǔ)變換矩陣(LocalToWorld & WorldToLocal)渲染場(chǎng)景時(shí)從根節(jié)點(diǎn)起遍歷場(chǎng)景樹(shù),每得到當(dāng)前節(jié)點(diǎn)時(shí)都通過(guò)它的變換矩陣得到局部坐標(biāo)系。
?最重要的是這個(gè)場(chǎng)景樹(shù)對(duì)關(guān)卡設(shè)計(jì)師而言一定要是可隨時(shí)進(jìn)行觀察調(diào)整以及一定程度上的性能評(píng)估的,由于場(chǎng)景對(duì)象間的邏輯在程序引擎中很難管理(這些往往是由游戲設(shè)計(jì)師和關(guān)卡設(shè)計(jì)師共同擬定的),所以場(chǎng)景樹(shù)的結(jié)構(gòu)管理權(quán)大部分應(yīng)當(dāng)由程序員轉(zhuǎn)交至具體關(guān)卡的設(shè)計(jì)者。這樣一是便于關(guān)卡設(shè)計(jì)師根據(jù)場(chǎng)景的復(fù)雜度和性能評(píng)估隨時(shí)調(diào)整,二是便于后期針對(duì)特定的場(chǎng)景進(jìn)行特定的優(yōu)化,
?最重要的一點(diǎn)是任意的節(jié)點(diǎn)與其所有子節(jié)點(diǎn)都成了邏輯相關(guān)的,邏輯相關(guān)的好處在于“對(duì)某個(gè)節(jié)點(diǎn)進(jìn)行變換能夠立刻應(yīng)用于它的所有子節(jié)點(diǎn)”在大部分情況下都是合適的,因?yàn)樾枰黄鹱儞Q的對(duì)象往往都是邏輯相關(guān)的。這樣就免去了關(guān)卡設(shè)計(jì)師常常需要把某些對(duì)象并為一組一起移動(dòng)的麻煩。打個(gè)生動(dòng)點(diǎn)兒的比方,在即時(shí)戰(zhàn)略中,所有的兵種由于不是邏輯相關(guān)的,所以我們需要用Ctrl+1,Ctrl+2等將其分隊(duì),將對(duì)所有對(duì)象的獨(dú)立操作簡(jiǎn)化為組操作。但是如果所有的軍隊(duì)根據(jù)上下級(jí)所屬關(guān)系成為邏輯相關(guān)的層次結(jié)構(gòu),我們只需選中一個(gè)連長(zhǎng)就可以操作該連的所有單位,而選中司令則可以處理整個(gè)軍隊(duì),這樣對(duì)關(guān)卡的設(shè)計(jì)者而言顯然效率有極大的提高。
???
?關(guān)于游戲內(nèi)建的編輯器,也有了一些想法,不一定所有的信息都需要在hud上顯示出來(lái),這樣既麻煩也不便于顯示和修改。改進(jìn)的辦法是在游戲外另開(kāi)一個(gè)Editor窗口專用于顯示信息和修改信息,比如選中對(duì)象時(shí)顯示和修改被選中對(duì)象的信息,顯示和修改場(chǎng)景樹(shù)的節(jié)點(diǎn)間層次關(guān)系,等等。這樣最大的受益者是擁有雙顯示器的關(guān)卡設(shè)計(jì)師。他們可以在一個(gè)屏幕上全屏運(yùn)行游戲,而在另一個(gè)屏幕上修改場(chǎng)景樹(shù)的屬性。
?