终于把咱的编辑器写到一个段落了。撤销还原照着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)你只要看着制造说明书(高人源码)自己试着组装一次即可。