本來是想一周堅持寫一篇博客來記錄下自己學(xué)著寫編輯器的進(jìn)展的,不過總想著寫好一個階段再寫一篇總的能有寫“內(nèi)涵”的,于是乎拖著拖著一個月又過去了,最近想想自己又不是高手,blog還是該沒事就寫點(diǎn),不管是腦殘的錯誤

還是幼稚的想法都該寫下來。
4月中,編輯器底層大改;可以說咱的編輯器本來的大部分結(jié)構(gòu)學(xué)的是Ogitor,不過實際上程序最下面的結(jié)構(gòu)當(dāng)時大家沒學(xué)Ogitor(最下面的結(jié)構(gòu)指的是Ogitor對于編輯器對象的具體屬性都采用了專門的屬性容器,OgitorProperty<T>,當(dāng)時就以為ogitor只是為了解耦的),等我們把大部分基本的功能都實現(xiàn)了(地形,光照,實體,地形編輯,草體),回過頭來想加撤銷還原的時候發(fā)現(xiàn)不好辦了,(想一想,光以基本變量(bool等原子類型,Ogre::Vector3等基本數(shù)據(jù)類型)來保存具體編輯器的編輯屬性的話,根本沒辦法撤銷還原)于是我就從底層改起了。
1.去除過多的單件: 這一點(diǎn)是我和兄弟相當(dāng)贊同的,過多離散的單件往往在方便的同時破壞了整個程序的結(jié)構(gòu),改之和Ogitor已知,采用基類的ObjectList的方式來管理所有的編輯器對象實例,這樣所有的類都能得到統(tǒng)一管理,查找指定對象只需以它的類型來查找即可,需要單獨(dú)更新的對象則加入到UpdateList中,然后在迭代更新列表逐個更新即可,在不用我們自己在主體里來回添加Update語句了。(這主要是為了解耦)但我想了想有個地方還是沒學(xué)ogitor,它里面每個編輯器對象都有所有的parentEditor,這樣則形成一種樹形結(jié)構(gòu),這樣的設(shè)計更加緊湊,不過我們暫時覺得沒什么太大必要加,就放棄了(開始對OgitorProperty<T>也是這個想法

)。
2. 屬性注冊: 屬性部分所有內(nèi)容,我還沒全看明白。一是由于撤銷還原還沒弄,二是信號那塊我也還沒加(雖然樹形類的代碼是全扒過來了...)。不過就我目前看的部分而言,Ogitor這幫家伙寫得還真棒,利用模板trait來調(diào)用對應(yīng)變量類型函數(shù)(第二次見,第一次在STL源碼剖析里,就那塊和開始的部分我能看懂...),光看到這個內(nèi)容小菜我就興奮不已了。注冊的部分實際不難,好好看看PROPERTY_PTR和SETTER,GETTER這些個宏就能明白,無非是在對應(yīng)編輯器的工廠map表里先添加定義,然后利用這些個宏為mProperties添加屬性變量,以及變量相關(guān)聯(lián)的設(shè)置其數(shù)值的函數(shù)。
調(diào)試中犯的一些搞笑錯誤: 1.前天在重寫B(tài)aseObject的GetNode函數(shù)(返回編輯器對象所在的場景節(jié)點(diǎn),若是基類則為NULL,只有是NodeObject或其以上的才有值,這里沒學(xué)Ogitor的parentnode),發(fā)現(xiàn)程序里實際調(diào)用的時候就是不調(diào)NodeObject::GetNode而是調(diào)BaseObject::GetNode(),改了會都對C++產(chǎn)生了疑惑。。。還專門寫了測試來看看究竟調(diào)用哪個,結(jié)構(gòu)也應(yīng)該是NodeObject::GetNode,這問題足足花了我二十分鐘的時間,才發(fā)現(xiàn)自己在繼承方法聲明上忘記加const了。。。那一刻的感慨啊。。還是得經(jīng)常把Effective C++拿出來摸一摸,翻一翻的。。
改著改著,突然在想:當(dāng)有高手源碼借鑒的時候,作為我這樣的小菜(指的是C++學(xué)了1年多,功底自認(rèn)為不錯,但缺乏實際經(jīng)驗的人),是改照單全理解了再寫還是邊理解邊按自己修改的較差方法去實現(xiàn)呢?我覺得是后者,因為后者總是需要去修改,而在修改的過程中才是存疑解惑的過程,這個過程中小菜才能明白為何高手如此“麻煩”地繞道偏行。還有,正如tonykee說的,編輯器的確是個無底洞~~要懂得適可而止的。
分享點(diǎn)新聞: 1.GoogleCode和SVN升級為2G了(具體貌似是1G更新空間,另外1G存儲,這一點(diǎn)沒太明白。。),嫌sourceForge麻煩的有福音咯~~
2.Ogitor這幫家伙更新的越來越快了,當(dāng)時還給他們提意見說應(yīng)該做成簡單material腳本編寫的編輯器,剛說完,人家就回說:已經(jīng)開始做了

順帶一提,Ogitor有中文版了,感謝Coho的翻譯,雖然有些地方還沒翻譯好,不過我空了也會幫幫他們忙的

3.星際7月27日預(yù)售,很期待它的銀河編輯器啊~~
這兩天完成撤銷還原后再更新吧,希望我寫的亂七八糟的東西對大家有幫助。