1111111111111

动画很简单,它由两个步骤组成:显示和擦除。显示就是直接画出马就可以了,而擦除吗,”木鸿**洋得意起来,“其实就是在原地方用黑色再画一次,马就消失了,然后把左上角坐标移动到新的位置继续显示,马就前移了!不断的擦除和显示,就形成了动画的效果。我在俄罗斯方块中就是这么做的。”在计算机中常常有多种方法可以实现同一件事情,也就是条条大路通罗马。真正的程序员需要综合各种情况,思索各种实现方法,并从中选择最适合的一种。以底色重画天马来实现动画,这种方法的优点是简单,但缺点是,如果背景不是纯底色时,会破坏原来的背景。”见木鸿飞紧锁眉头,哥哥继续解释:“假设你的背景是由太阳、星星和地球的图案,当你用背景色——比如黑色——重画时,屏幕上留下的将是黑色的线条,原来的背影将被黑色取代。而随着动画的继续,最终天马飞过的地方将全成为黑色……”

“就像刚刚以蓝色为背景时一样。”木鸿飞明白了,开始抢答。
“对!所以第二种动画方法就是以异或方式画图。”重音在“异或”上。
“疑惑?”木鸿飞只知疑惑,不识异或。
“异或是位运行,你还没有学习二进制,不过没关系,二进制很简单,你的数学也很好,应该马上能够理解。”哥哥开始现场教学。
不一会儿,木鸿飞理解了“异或”的特性:对同一背景,同一图形,使用“异或”方式显示两次,则背景复原,就如同从来没有显示一样。程序的更改也很简单:在开始处将输出方式设置为“异或”;“擦除”时也不再使用背景色而使用前景色——此处是红色——即可。为了使演示结果更具备说服力,木鸿飞还在移动前画了若干个几何图形充当背景。
程序开始运行,天马飞过星空后,星空背景一切依旧,成功!木鸿飞欢喜的手舞足蹈,不住的说:“这个方法好,这个方法好!简单!”
“使用异或方式是实现动画的一种方法,其优点是可以保护背景,但是缺点也显而易见。”哥哥继续爆料。
“它还有缺点?还显而易见?我怎么没有看到。”木鸿飞已经完全陷入惊奇当中。
“你别只顾高兴,平静的观察的话肯定可以发现。”哥哥叫停木鸿飞的兴奋。
“好。”木鸿飞深吸一口气,平静一下心情,然后看了看代码,好像还是没有什么特别,再运行程序,终于有了发现:“天马的颜色变了,程序使用了红色,但显示出来是紫红色!还有通过背景几何图形时,那些交叉的点颜色都变了!”
“对,异或方式显示容易更改颜色。”说着,哥哥拿起笔,在纸上演示:“你看,本来输出红色,红色代码是0100,而背景是蓝色,蓝色代码是0001,这两种颜色异或后是0101,正好是紫红色。”
“哦,我明白了。”木鸿飞恍然大悟,“有没有什么方法既可以保留背景,又不更改显示的颜色呢。”
“你能这么想就对了!程序就是在一次次改进中前行。不过其他的方法设计起来就比较麻烦了。比如背景保存法:在显示前,先把图形所涉及区域的背景保存下来。擦除时,就把保存的背景再显示出来。”考虑到木鸿飞还没有学习相关函数,哥哥亲自操刀,对程序进行了一些修改,于是天马终于以自己本来的颜色飞跃星空了。
“哥哥,这个方式设计起来好像比较麻烦,加了好多代码。”木鸿飞已经初步具备了分析设计方法的思维了。
“的确比较麻烦,而且保存背景也是需要内存的。当然,可以采用背景刷新的方法解决这个问题,。”哥哥又提出一种方法。
“背景刷新法,难道每次都重新刷新,也就是全面画一次背景图像。”木鸿飞自动忽略不懂的“内存”,主动思考新方法。
“没错,每次擦除时,都把重新画一次背景,这样做即能擦除原图形,又能复原背景,一举两得,而且实现起来相当简单。不过每次重画背景时都特别费时,每动一步,就看到屏幕闪烁一次,给人一种卡机的感觉。”哥哥详细的分析。
“有解决方案吗?”木鸿飞知道哥哥必有下文。
“有,可以采用多页面显示法。一个屏幕就是一个页面,我们调用各种画图函数,一般都是直接画在屏幕页面上,比如你调用line函数,屏幕上马上就会显示一条线。但是也可以不马上显示,比如准备一张白纸,所有的画图函数都画在白纸上,当然白纸藏起来不显示到屏幕上的,上面画的图形你都看不到,直到画图完毕,再把白纸的内容显示到屏幕上。这种白纸就是页面,我们可以在显示一个页面的同时,画另一个页面,画好后显示另一个页面而同时画前一个页面,如此循环。”哥哥说道。
“原理我懂,就像放电影一样,一秒钟24张图片,一页一页的显示出来,在显示第一页的同时设计下一页。但是为什么要这么做,直接在屏幕上显示不是很好吗?”木鸿飞不解的问。
“你还没有正式学习计算机,有些情况可能还不太了解。”哥哥解释道:“有时候直接在屏幕上画图速度会比较慢。今天的例子简单,所以看不出来。但是有一些复杂的图形程序,生成全部的图形需要比较长的时间,如果直接在屏幕上显示的话,就会像慢动作一样很明显的看到这个过程,比如先画一个三角形,再画一个矩形等等。而实际上,用户只在乎最后的结果,所以就需要把这些缓慢的实现步骤掩藏起来。”
 “我明白了。实现动画有背景色重画法、异或法、背景保存法、背景刷新法和多页面显示法。”木鸿飞对今天的学习做了一个总结。
“当然,你也可以找到其他的方法。其实今天告诉你动画的这么多种实现方法,并不是教会你做动画,那还太早了点。目的只是告诉你,计算机程序的设计方法多种多样,每种方法都有自己的优缺点,都有自己适用范围。所以在设计程序时,一定要考虑各种方法,并从中选出最适合的来。不要以为这样很多余,也不要以为浪费了其他的设计方法,这个程序不适合,也许下一个程序刚好适合也不一定。有一句可能现在你还不能理解:算法没有好坏之分,只有适合和不适合的区别。”
木鸿飞度过了非常有意义的一天,他在展示自身计算机才能的同时也隐隐触及了计算机的博大精深,仅仅一个动画就牵涉若干的方法,而这还只是冰山一角。虽然不能立刻学会这些的知识,虽然不能马上消化这些的思想,但木鸿飞越发喜欢上计算机,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值