[置顶]【原创】《钟表助教》编程趣事

2019-05-25

钟表助教 编程趣事

曾经记得2006年学习flash软件做动画的时候,觉得写脚本特别难。只能用stop、play等几个最常用最简单的语句,至于其他语句就没兴趣深入研究了。随着时间的推移,家庭琐事再加上工作上的方方面面都要打点好,就更没精力和时间去深入研究了。转眼间,2015年秋季女儿幼儿园毕业顺利升入了小学一年级(^_^),相比幼儿园的学习内容,小学数学的内容更加深入了一些。一天,辅导女儿写作业时发现有关认识时钟的练习题,给孩子讲解这样的题目时,由于缺少称手的工具,每次都得在草纸上绘制空白表盘,如果画得不圆,刻度标记得不准确,就容易引起孩子的误解。于是,就产生了用电脑软件进行辅助教学这个内容的想法。可是搜遍网络也没有找到这样的软件,看来只有自己制作一个了。能做这类软件的工具有不少,像Authorware、Flash、PowerPoint、C++、VB等等。这几样本人有幸都略通一二,但Authorware稍有复杂适合做大型软件;PowerPoint适合作演示功能,但交互功能太弱,不能实现随机出题功能;而C++和VB界面制作稍稍弱一些,对矢量图支持不好。于是,就选择了Flash,交互性足够强大,界面支持矢量图可随意放大缩小。和预料的一样,在实际制作中,遇到最大的困难不是界面如何调整完美,也不是交互功能的顺利实现,而是调试脚本语句实现预期的功能。而更加难上加难的,是完美解决掉软件功能基本实现时出现的小小BUG。

因为是给儿童使用,考虑到电脑屏幕对视力的影响,所以界面颜色选择了护眼色——苹果绿,这是从2007年央视一套的“家有妙招”节目中学来的,当时顾斌等嘉宾参与实验并证明该颜色对缓解视疲劳有效。同时,2001年左右,磐石市教育局给各中小学配备的学生本和教师教案本均使用了浅绿颜色和苹果绿色极为接近颜色的纸张,学生本的封底还印有说明,里面说这种颜色能反射特定波长的光波,能缓解视疲劳。鉴于这个原因,再开发其他软件,也尽量使用该颜色作为背景色,避免使用对视力不利的颜色。

最初的功能只有正常走时、随机出题、计时这几项最简单最实用的功能,秒针是步进式的,即一秒一蹦的走法,后来,经过研究代码,将秒针的角度值加入了毫秒值,即千分之一秒。于是秒针由步进式变为连续式走法。因担心连续式比步进式占用更多的CPU资源(后证实这种担心是多余的),后又将步进式回归,变为可任意切换步进式和连续式两种模式。因为我不是专业程序员,一个小小的难题过不去就得弄好一阵子。

一天,同事小高见到软件界面中的表盘,于是想起其所组织的区域培训课上需要用到倒计时20分钟的闹钟软件,还没有找到合适的软件,就要求为其订制一个倒计时闹表。经过一翻调试、导入铃声声音文件,“倒计时”功能诞生了。有了倒计时,也得有正计时吧?于是“计时”功能也添加进来了。即然能发声“响闹”了,那就再加个定时响闹功能,于是就有了“闹钟”功能。

又一天,同事小陈见我在做钟表软件,顺便提了一句,其上小学三年级的女儿对钟面的运行情况没有什么直观印象,想为其女儿订制快速展示指针运转情况的工具。比如从早上8:00到下午4:30,经过指针快速运转,让孩子产生直观印象,明白时针转了几圈分针转了几圈。弄懂他的“旨意”后,又是经过5天多的攻关,这个功能基本实现了,就叫“演示”吧。经过多次输入时间试验,发现偶有到达指定结束时间不停止的问题。看代码看得眼睛生疼,甚至想放弃不去调了,可就是有那么一点不甘心。经过仔细摸排发现,原来是快速走时每次减少的秒数超过60造成的,于是将这个数值最大限制为60问题就解决了。后来经过调整,将固定速度改为可调速式,指针运转的速度从1到60随意调节,用鼠标拖动调节滑块就实现即时变速。

以前,看到别人做的精美钟表软件界面时,就萌生过拖动指针调节钟面时间的想法,因为小时候家里上发条的座钟就是直接用手拨分针来校时的。一直也没有机会尝试做一下,现在真是天赐良机,正好可以实现一下这个想法。先看网络上有没有人做成的或分享出的代码。经过一翻搜索,只找到了有类似想法的人提过的问题,并没有完整的作品和解决方案。于是静下心来自己思考如何做吧。拖动指针很容易就实现了,这得益于flash软件强大的交互功能,但是难就难在时、分、秒三针联动上。分针转一圈360度,时针要转动30度,秒针则转60圈21600度。简单分析后做出来的效果是分针转动多圈时,时针仅在30度范围内来回波动。之前的各种功能调试和这个相比简直是小儿科的难度。终于,功夫不负有心人。渐渐地,拨钟效果正确了。但是,只能顺时针正转拨钟,反转还是时针在30度内跳动。几天忙碌下来,反转问题也解决了!拖分针可以了,再做拖时针,最后加秒针。看似进行得很顺利,其实一个残酷的毛病才刚刚浮现出来,那就是拨钟时切换指针后时间回归为拨前状态的问题,即所谓的有缝切换。经过多次尝试,无缝切换完美实现了!可喜可贺!就这样在寒假来临之际,在网络上发布了第一个比较成熟的1.4版。以为这样就可以高枕无忧了,谁知一次使用时不经意地拨了一下钟,时针居然跳了30度,很明显,这是个不是必然出现的隐藏BUG!再要重现这个BUG,很是费劲儿。于是不断地拨钟,看到底在什么情况下这个BUG才会出现。不断尝试下,终于让它现出了原形:时针、分针分别位于12点刻度左右两边时才会出现这个“跳针”的BUG。看似很简单很容易解决的这个小毛病,让我足足攻了一个月!其间,将拨钟模块代码全部推翻重新编写一次仍未能彻底解决掉这个小毛病。多少次眼晴酸疼、肩背酸疼、脖子酸疼……转眼到了二月,觉得这应该是一个神仙也没辙的无解之谜。各种办法都尝试过了,无一奏效,该放弃了,反正很少出现这个BUG,对整个软件的功能也并无大碍。疲惫了一个月,也快过年了,该让自己放松放松了,毕竟是寒假。于是就停止了继续调试,想让自己好好休息休息。但是问题没解决总有点不太甘心,毕竟已经付出了那么多心血。2016年2月5日早晨醒来,在卫生间里坐在马桶上如厕,头脑里还在想怎么样去解决问题。忽然灵光一闪,何不在鼠标按下时复位鼠标指针的坐标呢?因为判断拖动钟表指针转动的角度主要依靠获取鼠标指针的坐标。当时心里一阵欣喜,觉得这是这么多天来的症结所在,找到它,问题就能从根本解决了。如厕后立即上机试验,果然,一行代码,为我这一个多月的调码生涯画上了圆满的句号。2月7号可以过一个安稳年了。年后,又对一些功能进行了完善和细化,当然又都是很实用也很小儿科的东西了。2016年2月28日发布了最新的1.69版,如果还有什么功能需要添加,就看广大用户的需求吧。

不知道遇到过多少难题,也不知道经过多少次攻关,功能逐渐完善、增强、增多,从一个小工具发展为一个小软件。孩子也在这个过程中受益,已经学会了认识指针式钟表,并且很熟练(她最爱做的小考难度是“五分练习”),这对于一个一年级小学生来说已经“超纲”。

好了,这个软件就这样,向下一个软件阵地进发!(预告一下:下一个软件叫《驾考助教》,听说是免费的哦。)

                作者

                2016.5.7

本文来自:http://hsxxtgl.blog.163.com/blog/static/5636322720164734224517/


下一篇:这是最后一篇
上一篇:这是第一篇