利用图形页实现动画的方法
<P> 计算机图形的动画显示实际上是一系列静止图像在不同位置的重放,大部分动态现实程序模拟运动的基本方法是相同的,即在屏幕某一显示位置上先擦出一个静止图像,然后在临近的位置上绘出下一副图,程序重复的执行擦出和绘制过程,就产生所需要的动画效果.这种动画方式对于简单的图形效果是很好的,但对于较为复杂的图形来说,效果就不是很好了,为了解决这一问题,用多页显示绘图的方法很有效. </P><P> 在turbo c的图形子系统中,提供了两条重要的页面设置函数,即设置图形输出活动页函数setactivepage()和设置可见图形页函数setvisualpage(),其用法为: </P>
<P> #include<GRAPHICS.H> void far setactivepage(); <BR> void far setvisualpage(); </P>
<P>图形页实际上是一个虚假页面,是内存中开辟的一块内存缓冲区.活动图像也可以是当前显示页,也可以是非显示页,当用函数setactivepage()选定某一页为活动页后,其后所有的图形输出都针对该页,有了多个图形页,程序就可以将图形输出到一个非显示屏幕页上,然后通过调用setvisualpage()改变可见页来快速显示,关闭图形页面中的画面.</P>
<P> 多个图形页交替显示的过程如下: 在所用的两个页面中,当一个可见页面用于显示时,另一个关闭页用于绘图.当新的画面上成后,就把两页进行转换,原作为显示用的页面在用来绘制新的图形.一般可把画面显示顺序作如下安排,第一页用于显示动画过程的1,3,5...等画面,第二页用于显示2,4,6...等画面,如此交替下去,利用页面转换技术进行动态显示,图形的擦出和重画过程都在后台进行,屏幕上出现的仅是整幅画面的瞬间切换,其动态效果十分平滑,如下面的程序. </P>
<P>#include <graphics.h><BR>#include <stdio.h><BR>#include <stdlib.h><BR>#include <alloc.h><BR>#include <math.h><BR>main()<BR>{void * ptr;<BR>int gd=DETECT,gm;<BR>float i;<BR>initgraph(&gd,&gm,"d:\\tc");<BR>setactivepage(1);<BR>setcolor(RED);<BR>setfillstyle(1,14);<BR>fillellipse(10,10,10,10);<BR>ptr=malloc(imagesize(0,0,20,20));<BR>getimage(0,0,20,20,ptr);<BR>randomize();<BR>setactivepage(0);<BR>for(i=0;i<3000;i++)<BR>putpixel(random(640),random(480),random(15));<BR>for(i=0;i<6.28*4;i=i+0.005)<BR>{putimage(300+8*(cos(i)+i*sin(i)),240+6*(sin(i)-i*cos(i)),ptr,COPY_PUT);<BR>putimage(300+8*(cos(i)+(i)*sin(i)),240+6*(sin(i)-(i)*cos(i)),ptr,COPY_PUT);<BR>if(kbhit()) break;<BR>delay(10);<BR>}<BR>getch();<BR>closegraph();<BR>}</P>
页:
[1]
