利用计算机图形做动画时,移动一个东西要完成两个步骤。
1. 在新的位置上画出图形。
2. 把原来的图形擦掉。
我们已经看到了第一部分。在新的位置画出了球。现在必须将原先位置的球擦掉。不过“擦掉”到底是什么意思?
擦掉图像
如果在纸上或黑板上画画,可以很容易地擦掉,只需要一块橡皮或一个黑板擦,对吗?不过,如果画的是一幅水彩画呢?假设你在画一幅蓝天的水彩画,然后在蓝天里画上一只鸟。你怎么把这只鸟“擦掉”呢?水彩是擦不掉的。你必须在鸟所在的位置上用水彩画上新的蓝天。
计算机图形就像水彩画,而不像铅笔画或粉笔画。要“擦掉”某个东西,你实际要做的是把它“盖住”。但是用什么来盖住呢?对于蓝天水彩画,天是蓝的,所以要用蓝色来覆盖小鸟。我们的背景是白色的,所以必须用白色覆盖沙滩球原来的图像。
让我们来试试看。按照代码清单 16-12 修改代码清单 16-11 中的程序。这里只需要增加一行新代码。
代码清单 16-12 再来移动沙滩球
我们增加了第 10 行,在第一个沙滩球上画了一个白色矩形。沙滩球图形大约 90 像素宽 90 像素高,所以白色矩形的大小就是 90 像素宽、90 像素高。如果运行代码清单 16-12 中的程序,看起来沙滩球会从它原来的位置移到新位置。
底下有什么
用我们的白色背景(或水彩画中的蓝天)覆盖是很容易的。不过如果在一个有云的天空里画了一只鸟,又怎么办呢?或者如果背景上有树呢?这种情况下,就必须用云或树覆盖鸟来把它擦掉。这里的重点是:你必须知道背景上有什么,也就是在你的图像“底下”是什么,因为移动图像时,必须放回或者重绘这个位置上原来的背景。
对于我们的沙滩球例子来说,这相当容易,因为背景只有白色。不过如果背景是一个沙滩场景,就会困难得多。不只是涂上白色,我们必须画出正确的背景图像部分。还有一个选择是重绘整个场景,然后把沙滩球放在它的新位置上。