看了Ogitor的代码后, 自己又实践了一把, 结合N3中学到的一些技巧, 在编辑器中得到了验证.
虽说做的是场景编辑器, 但是其它编辑器也可以用的, 毕竟思想都差不多.
对于一个编辑器, 通常是由一个个的"实体"组成, 或者叫"对象". 而"对象"又是由各种"属性"所组成.
以场景编辑器为例, 我们通常会涉及以下操作:
可以看到, 除了地形之外, 其它的操作都差不多. 如果把地形把块对待, 每个地形块做为一个"对象", 高度和纹理编辑当成属性编辑, 那么上面都可以看成是同一种编辑方式了. 还有"摆"的这个操作, 其实本质上了也是对象的位置变换这个属性的变化.
由此可以得出: 编辑器的一切操作都是属性编辑
实体不用说了, 相信每个引擎都有Model/Light/Sound之类的对象类.
那么怎么去定义一个属性呢?
简单的来说, 一个属性是一个<名称, 值>的配对, 对象就是这些属性的一个集合体. 以点光源为例, 它一般有这么几个属性:
实际应用中我使用了FourCC代替String来索引属性, 这样可以用map<FourCC, Variant>做快速的访问. 更高级的实现可以参见N3的Attribute模块.
下面说说使用属性抽象的好处:
再考查一下WPF下的绑定机制与属性相结合会产生什么效果~