終于把咱的編輯器寫到一個段落了。撤銷還原照著ogitor寫好了,不過依然有些部分不完善:我們的GUI庫為了方便就直接選了MFC而非Qt。(還有一個原因是不想全部拿ogitor的)用過Qt的也知道,OOP的GUI編寫是相當方便的,可是MFC就不同了,MFC的基于事件響應在當今顯得太老舊了(我這么以為額),而且c++沒有語言級別上的委托,沒有qt那種信號機制,所以咱得自己實現。
今天早上查實現策略的時候找到一個sinbad(Ogre的創始者)寫的GUI框架,我看了一眼就覺得比ogitor寫的更通用。里面的singal,Funciton都用的是boost庫,該用sharedPtr的地方都用了,注釋齊全,自覺得這就是GUI結構的極限了~~~p話不多說,我就把這個小項目的特性翻譯下吧:
原文地址:
http://www.ogre3d.org/forums/viewtopic.php?f=11&t=41153(代碼需要從SVN下載)
這個框架目前實現的:
1.嵌入了Ogre渲染的多窗口系統
2. 一個典型的3維建模風格的十字分割的四個面板,且能任意最大化其中的一個。
3.攝像機具有FPS模式和軌道(orbit)觀察模式。
4.松耦合的事件系統將傳遞model部分(MVC的Model)的變化給別的子系統。
我愛這塊。
5.單擊點選和框選系統。
6.泛型屬性系統。
我愛它。。。太帥了。。7.簡單的Model實現。
引用sinbad最后的話:
nevertheless there's quite a few weeks of effort in this so it's a pretty solid base。
想寫編輯器但沒有經驗的直接拿這個吧,寫的太棒了~~注意:sinbad用的GUI庫是Wxwidget,自己需要變變的。
這段時間寫編輯器,有種特別強烈的感覺:
我覺得基于GUI的程序是有盡頭的,GUI程序寫到MVC完全了,就基本完美了,而這些思想其實都是前人做好的車輪,你是自己鉆研也好,看高人源碼也好,最終的終點都在這。(當然我承認自己鉆研的確收獲更多,畢竟這是思考的優勢)我們無法寫的再好了。它不像寫引擎,寫圖形,技術日新月異。GUI只需要靈活,松耦合,泛型,這就是它的全部。這里也體會到c++的另一個好處,啥都沒有,啥都得自己來,它不會給你c#那樣的語言級委托,但它給你了零件,(STL,Boost)你只要看著制造說明書(高人源碼)自己試著組裝一次即可。