卡片游戏的客户端表现很多地方需要用到序列式的调用,自己用数值去调当然是可以的,就是会嫌麻烦,于是就做了个这么个玩意儿,准备把卡片的一些游戏表现全都用这个来拖出来,哈哈,雪球越滚越大了,希望不要成了烂尾楼了。
最近的效率真的下降了,总共弄了4天才搞定,不过在这个过程中对WPF更熟悉了一些。
实现这个是基本按照了WPF本身的思路来做的,就是把逻辑和外观全部分开了,扩展的Controls目前只写了600行左右,其中大多数还是WPF那相当占空间的“static DependencyProperty xxx”。只有逻辑代码,没有任何一句跟外观有关系的代码。所有的外观全都是用Style做的,也就是说,理论上你只要切换Style(哦,当然,有些规则还是要注意的),就可以做出任意形状和形态的节点、控制点和连线。
如果不这么做的话当然会更快,有目标的东西总是比没有目标的要难做,感觉WPF本身的思路是很好的,不过确实不是太容易掌握,确实,理论上说,只写逻辑代码要比统一考虑逻辑和外观要省力,但是这对写逻辑代码的那些人却有了很高的要求。至少,一开始得设计一下吧,好好想想需要哪些外观,这些外观与内部逻辑之间又是怎么联系的,哪些逻辑可以做到完全独立,哪些逻辑需要拆解为更小的单元,还有要为外观提供哪些辅助方法来让他们获得一些不属于逻辑层面但是外观却需要的东西呢?(比如贝塞尔曲线的控制点——这玩意儿跟逻辑半毛钱关系都木有)
不过这么做完的好处确实是很明显,外部调用只写了几句话:
LinkerNode1.DataContext = new TestNodeProxy();
LinkerNode2.DataContext = new TestNodeProxy();
LinkerNode3.DataContext = new TestNodeProxy();
LinkerNode4.DataContext = new TestNodeProxy();
然后所有的这一切就全都好了。
上图!
其实线和点都是一直在闪烁的,不过那样的话除非是截视频了,等这个玩意儿全部搞定了再统一弄吧。
能够互联的节点,会用绿色标示。目前的节点间的关系判断比较简单,只有可通行和不可通行,一般来说应该是够了吧?!
当然如果有更多的要求其实也可以,WPF的Style系统相当灵活,自己写个Style Trigger,判断一些附加的参数什么的就可以了。
联通了,白色。
不能联通的时候,会用红色提醒。
胡乱连了连的样子。
Styles,总共快500行,大部分时间都在这上面了,调得蛋疼……