C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十二)重构 – 让代码插上翅膀自由飞翔
2010-09-30 20:49:35 来源:WEB开发网三、取其精华,去掉糟粕,让代码质量得到质的飞跃:
在WPF/Silverlight中,大家是否有发现一个比较古怪的情况,每个控件都有这样两个属性:x:Name和Name,它们的区别到底在哪?我可以谨慎的告诉大家,其实使用起来两者效果是一模一样的。例如我设置x:Name=”A”,或设置Name=”A”,在Behind代码中两种方式均可以将”A”值识别。这可头大了,难道MS在搞飞机?其实区别仅仅是上帝创造的先后问题,这对于绝大多数人来说毫无意义。因此我们可以将之归纳到重复属性的范畴,其他的类似情况在WPF/Silverlight中还有很多,连带头老大哥都这样龌龊,我们的开发中出现类似情况也算情有可原。所以,在重构时,我们还需要对所有的属性进行理性的审视,是否有重复的,是否有不合理的,是否有没用到却还凳在那的,这些统统得回炉再造。惟有如此,才能给程序的扩展提供更便利的支持。同样的,我以一个活生生的例子给大家讲解。
是否还记得上一节中,要实现9区域的主角移动,首先得定义WindowCenterX与WindowCenterY这两个变量,然后通过让它俩参与到范围判断中从而得到主角当前所处的区域。但是大家有没想过,如果游戏窗口尺寸是可变的,为了兼容前面实现的功能,每次窗口尺寸改变(如拖动边缘、最大化、窗口化等)时,我们都得重新设置WindowCenterX和WindowCenterY这两个值,不但增加了代码量,而且毫无扩展性而言,这是相当糟糕的。因此,我使用游戏窗口现有变量:ActualWidth与ActualHeight来取代WindowCenterX与WindowCenterY,即ActualWidth /2=WindowCenterX,ActualHeight/2=WindowCenterY,然后替换掉全部其他所有调用到WindowCenterX与WindowCenterY的地方。结果是,我们不论如何调整窗体尺寸,都不需要再更改任何代码,ActualWidth与ActualHeight就好比心有灵犀的得力助手,为您提供时时的游戏窗口实际宽度与高度。
当然,重构的方式还有很多很多,但是它们的最终目的都只有一个:让代码插上翅膀自由飞翔。可以这么说,本节的代码在保证前一节功能不变的前提下我对其进行了大幅度的代码重构,不仅优化结构,更可贵的是将整个架构提升到极具拓展性的高度。当然,嘴上说的没有一点价值,事实将胜于雄辩:下节我将给您演示短短十几行代码轻松实现WPF下窗口及其内部所有对象的任意缩放,完美比拟MMORPG中的全屏与窗口模式切换,敬请关注。
Tags:开发 WPF Silverlight
编辑录入:爽爽 [复制链接] [打 印]- ››开发Android 日历教程
- ››开发学院总结 Win 8实用技巧大全
- ››开发学院原创教程:把win8的IE10放桌面上方法(非...
- ››silverlight全屏显示图片
- ››Silverlight MVVM 模式(一) 切近实战
- ››开发者眼中的Windows Phone和Android
- ››开发学院教你用SQL 语句最快速清空MySQL 数据表的...
- ››WPF学习笔记12. Binding (5)
- ››WPF学习笔记11. Binding (4)
- ››WPF学习笔记10. Binding (3)
- ››WPF学习笔记9. Binding (2)
- ››WPF学习笔记8. Binding
更多精彩
赞助商链接