4 实现动画思路
为了达到动态显示由下位机传送过来的信息, 就必须使用动画技术。动画片的原理是将一幅一幅的图片排列起来, 至少以24 幅/ s 的速度连续播放, 这样以来骗过了人们迟钝的眼睛, 使人们误以为看到的一切在运动, 而忘记了这一切都只是静止图片组成的。
这一思路对做电脑动画非常有帮助, 很容易让人联想到将屏幕作为一张图片, 每次对屏幕这样的图片进行重新绘制。具体思路如下:
(1) 在屏幕上画一个将要运动的图像;
(2) 停留一些时间( 事实上非常短, 很可能只有几十到几百毫秒) ;
(3) 清除屏幕( 或者是屏幕的局部);
(4) 在刚才被清除的地方相近处( 固定增量) 重新画一个图像;
(5) 重复步骤(2) ~ (4) 。
5 简单动画实现
逻辑运算中的异或指A 与B 的非同B 与A 的非进行或操作的结果。异或逻辑运算有一个特点, 如果A 和B 是相同的, 那么结果一定为0( 1 异或1= 1* 0+0* 1= 0+ 0= 0) 。或者说, 自身异或等于没有进行任何操作。异或与图形绘制有一定的关系。
如果在一个位置画了一条红色的线, 然后在这个位置再画一次结果是红线还在那里, 没有变化。可是如果在画第一条线之前就设置用异或方式画线, 那么当画第二条线的时候奇迹便发生了屏幕上的那条红线消失了。实现清单如下:
# include
# include < stdio.h>
# include < stdlib.h>
# include < conio.h>
int main( void) {
int gdriver= DETECT , gmode;
initgraph( & gdriver, & gmode, ) ; / / 初始化图形模式
setwritemode( XOR_PUT) ; / / 设置异或模式
setcolor( RED) ; / / 设置前景颜色为红色
line( 100, 200, 500, 200) ; / / 画红线
getch( ) ;
closeg raph( ) ; / / 关闭图形模式, 恢复到文本模式
return 0;
}
在要进行异或操作之前, 使用了一个设置异或模式的函数setwritemode( ) 。异或可以帮助我们用最简单的方法二次完全重画方法擦除原先的图形。那么如何将它和动画联系起来呢?
提出的异或思路如下:
(1)设置异或模式, 然后在屏幕上画一个圆和一个正方形;
(2)停留一些时间;
(3)在刚才画圆的位置用同样的颜色再画一个圆(圆消失了) ;
(4)在刚才画圆位置相近处( 固定增量) 再画一个圆;
(5)重复步骤(2) ~ (4) 。
以下是使用异或思路实现一个运动的圆和一个静止的正方形的例程。