摘要: 在Win7上装了个IE10,虽然有不少诱人的新特性,但是在调试SL项目的时候却发现它对SL的支持有不少的问题,看来哥也要紧跟时代潮流了。本节应该是该系列的封篇之作了,哪天有空了再实现一个Html5版本吧,不过这个SL代码我会不经意地去维护的,比如Bug修复、易用性改善等等都不需要不断地完善。在前面我们已经实现了基本的画图功能,如点、线、圆等,这些已经是尺规作图的全部功能了。但是要实现快速方便的作图,仅仅靠这三大件是非常低效的,因此我们需要提供更为复杂的一些画图技能,比如多边形、平行线、对称点之类的,我们称为复合图形。本节的主要工作就是对每个复合图形提供一个画图练习题,用户完成了该练习题后就获得 阅读全文
posted @ 2013-01-05 12:36 地月银光 阅读(1517) 评论(1) 推荐(0)
摘要: 曾经有个很有意思的面试题,题目是要求写一个程序,求1到100的累加值。不少人写出来的都是这个样子的: int sum = 0; for (int i = 1; i <= 100; i++) sum += i;但是参考答案却是这样的:int sum = (1 + 100)*50; 这道题没有难度,只是告诉你一个问题:不要把所有的工作都交给电脑,那样你的脑子就要生锈了,从另外一个方面讲,如何才能节省CPU时间提高程序的性能,是我们要常常动脑子去考虑的。当发现程序存在性能问题时,首先要做的工作当然是找出... 阅读全文
posted @ 2012-12-17 14:35 地月银光 阅读(1269) 评论(1) 推荐(6)
摘要: 在此之前呢我们实现了尺规作图的所有图形元素,这就好比有了各种原材料,而且在上一节实现了数据保存和读取,就好比我们的图形产品能够进行储存和流通了;这一节我们就以工厂为概念来介绍我们复合图形的创建,就好比用原材料生产各种配件,然后用各种配件再组装成各种产品,也来过过老板瘾!管理工厂可不是那么简单的,特别是管人,特别是管90后,哎……,好在我们实现了全机械化操作,所有的生产活动都有计算机完成,呵呵。 首先来看看生产车间如何布局,因为我们工厂刚起步,业务不能太复杂,我们就选择几种主打产品吧,有:1. 线 2. 中垂线 3. 中点 4. 圆 5. 三角形外接圆 6. 点其中点、线、圆属于基础产品,我们已 阅读全文
posted @ 2012-12-14 10:27 地月银光 阅读(1511) 评论(5) 推荐(3)
摘要: 这几天年终绩效考核,琐事比较多所以更新得没有以前快了,绝对不是因为网上说的什么微软关闭Silverlight网站的影响啦,就算微软说现在马上抛弃SL,我也要把这个游戏写完,对于那些一边玩着Windows系统,一边大骂.net framework是微软的骷髅的人我一般也没有什么可说的。说到游戏,数据存取这个功能是必须的,不管是游戏设置还是状态什么的,都是可以存成数据文件,然后可以从文件加载。本节就来实现将我们画的图形存成Xml文件,然后可以从Xml文件中加载图形,也只有这样,我们的过关游戏才能实现。要实现数据保存就要现有文件的内容格式,对于我们的坐标系上各个图形元素而言,就是要把他们按照依赖顺序 阅读全文
posted @ 2012-12-12 14:25 地月银光 阅读(1415) 评论(10) 推荐(4)
摘要: 目前为止,我们画的图形都没有名字,这给人的感觉就是每个图形都是哑巴,虽然会动但是还无法正常地跟我们交流,这节开始我们就给他们取名字,使其能够表现自己。要命名并且显示在坐标系上,理所当然需要TextBlock了,但是我们以前创建的图形都是基于Shape的,这下就有点小麻烦了,如果在WPF中,我们还可以很方便地继承Shape去画自己的图形,但是在Silverlight中我还没有找到相关的资料可以做到这一点。在此我们只能给原有的CoordinateBase类做点小手术了:我们在该类中增加两个虚方法: protected virtual void ShapeAttached(){} ... 阅读全文
posted @ 2012-12-08 15:38 地月银光 阅读(1162) 评论(3) 推荐(1)
摘要: 上节我们实现了属性编辑器,并且遗留了两个主要问题,这节我们实现两个新的功能(掩框和右键菜单)来Fix这两个问题,并且新增一些新的特性。第一个主要问题是【选择】的功能(请注意我将【拽】改成了【选】,因为我们增加了选择以进行属性编辑,以前的拖拽只能选中可移动对象所以不适用了),当我们选中了一个对象,除了属性编辑器有反应外,对象本身无任何反应,如果对象很多,当我们眨了一下眼可能就不记得选中的是哪个对象了,就像在下围棋,不记得刚才下的是哪个子儿,岂不悲乎?解决这个问题,方式不要太多了,例如可以改变对象的样式等,但是这种方式可能与我们的样式编辑器相冲突,所以我们采取另外一种,通过掩框(MaskFrame 阅读全文
posted @ 2012-12-07 13:01 地月银光 阅读(1236) 评论(2) 推荐(2)
摘要: 顺便透露一下,我的一个目的就是做一个几何作图的过关游戏,根据过关的等级显示不同的技能,比如初始技能只有【笔】、【尺】、【规】,当你过了用这些初始竟能画平行线这一关,就会多一个技能【平行线】,所以以后就可以更方便地去画平行线了,嘿嘿,是不是挺有趣!如果只讲理论,前面介绍的那些基本已经足够了,但是要做成一个有趣的可玩的游戏,那还是相当低路漫漫其修远啊…,首先要考虑的就是清晰、整洁、美观。所以这一节我们就来实现一个样式编辑器,给我们画的图形化化妆,肉可不吃,色不可戒,哈哈。总结一下我们画的图形,都有哪些视觉上的属性需要考虑呢:线条颜色。填充颜色。线条粗细。线条虚实。透明度。巧的是,我们目前的图形只有 阅读全文
posted @ 2012-12-06 14:31 地月银光 阅读(1260) 评论(1) 推荐(2)
摘要: 我们在上一节已经在理论上实现了尺规作图的各个功能,并通过代码创建了示例,如何脱离代码使我们的鼠标能够肩负起尺、规、笔三者的重任呢。这涉及到界面交互事件处理很多繁杂的事情,因此一般纯代码下不需要太注意的细节问题,在界面编程时就必须特别注意,细节决定成败。其实我们之前已经有了一个鼠标行为——拖拽,如果不考虑鼠标右键的话,那么鼠标的委托有三个(MouseUp、MouseDown、MouseMove),我们在拖拽的行为中就是将拖拽行为托付给这些委托来实现的。其他的行为如画点、画线的原理也是如此,如何将这些行为封装使其互不干扰是我们要考虑的。行为不多,其结构也十分简单,如图:在IBehavior中我们提 阅读全文
posted @ 2012-12-04 17:33 地月银光 阅读(1109) 评论(0) 推荐(1)
摘要: 前面的分析被总结为两个字——依赖,我们的设计就从依赖开始。如果将相互依赖的各个元素画成一幅图,这种图就有两种形式,一种是树(像我们前面做的表达式解析),另一种就是网。很明显几何作图各个元素之间的关系是一张网,因此我们很难用一个树状的职能型的组织结构来类比地说明它,或者用人际关系之网来比如更恰当一点。不少人都会谈网色变,因为即是网就必然存在闭路,我们的网络短路或者程序死循环大多都拜他所赐,所以首先我们就要注意这个问题。举个例子,比如我们屏幕上有两个自由点A和B,以及依赖于它们的线段AB,我们用鼠标可以拖动自由点A,然后线段AB会跟着发生变化。如果我们用鼠标拖动线段,则A也会跟着移动,A的移动又带 阅读全文
posted @ 2012-12-03 20:22 地月银光 阅读(1160) 评论(0) 推荐(2)
摘要: 线上点,这个线可以是直线也可以是曲线,这里统称为线了,因为尺规作图无外乎这两种。按照我们前面对点的分析,线上点是半自由点:它可以随着鼠标拖动始终位于所在的线上这就出现一个问题:比如当线的长度或者圆的大小放生变化时,自由点的位置如何变化?我们前面给出的方案是,比例保持不变:对于直线是“距离比例不变”(严格说是向量CA:BA不变,因为点可能在线段延长线上)对于圆是“角度比例不变”(即圆上点C与参照直径PQ的起点P相对圆心的夹角不变)如下图所示:上图中红色点即为鼠标拖动线上点C(黄色)时,鼠标的位置,因为我们不控制鼠标的移动,所以鼠标可以移动到线外,那么要确定C的Ratio,就需要计算了,从上图可以 阅读全文
posted @ 2012-12-01 11:27 地月银光 阅读(1142) 评论(0) 推荐(3)