[求助]c图形的擦除问题与动画问题
<P>向各位求救了!我的问题就是:运动的小圆在运动后怎么把前面的小圆擦除掉?有什么函数吗?谢谢了!<BR>程序如下:</P><P>#include<graphics.h><BR>#include<stdio.h><BR>#include<dos.h><BR>main()<BR>{<BR> int gdriver=DETECT,gmode,y=180,i;</P>
<P> initgraph(&gdriver,&gmode,""); /*初始化图形系统*/<BR> cleardevice();<BR> rect();/*调用画图函数*/</P>
<P> for(i=0;i<5;i++) /*点(120,180)到点(120,120)的数据发送*/<BR> {<BR> setcolor(RED);<BR> outtextxy(90,100,"line is free,send message!");<BR> circle(120,y,2);<BR> sleep(1);<BR> y=y-14;<BR> y--;<BR> }</P>
<P> getch();<BR> closegraph();<BR>}</P>
<P>rect()<BR>{</P>
<P> setbkcolor(GREEN); /*背景颜色*/<BR> setlinestyle(SOLID_LINE,3,3);/*设定线的类型*/<BR> line(90,120,510,120); /*画直线*/<BR> line(120,120,120,180);<BR> line(240,120,240,180);<BR> line(360,120,360,180);<BR> line(480,120,480,180);<BR> setcolor(YELLOW);<BR> setfillstyle(SOLID_FILL,LIGHTGRAY); /*填充矩形颜色*/<BR> bar(90,180,150,240); /*画巨型框*/<BR> bar(210,180,270,240);<BR> bar(330,180,390,240);<BR> bar(450,180,510,240);<BR> outtextxy(95,210,"site 1"); /*在矩形框内标明站点序号*/<BR> outtextxy(215,210,"site 2");<BR> outtextxy(335,210,"site 3");<BR> outtextxy(455,210,"site 4");</P>
<P>}<BR></P> 可以用清屏函数clear(),不过每画一步都清一次屏实在太影响效率了,可以直接用画圆函数在原位置上用背景色再画一次,就可以覆盖掉原先的那个了。<BR>另,XOR模式也是一个办法,不过我不喜欢,也就不多说了。 <P>谢谢斑竹,可是c函数里有“清屏函数clear()”吗?还有用背景色重画圆那小圆的颜色不是跟背景色一样了吗?效果就不好了,还望斑竹再指教一下!</P> A.如果球的背景是单色,那你可以在画新球之前先用背景色在老位置上画个球,用以覆盖原来的球,这不存在效果好不好的问题;<BR>B.如果球的背景不是单色(比如是图案),那可以在画球之前先用getimage()函数把将要用来作画的一块小区域保存起来,球的位置变动要重画之前先用putimage()将上面保存的那块区域原处显示出来,这样背景图案就恢复了。这样,再保存下一个要“弄脏”的位置,画球,再恢复……这就是“脏矩形”算法的基本思路。<BR>你的程序无外乎以上两种情况,是哪种你选哪个方案,实现过程中出了问题是代码组织的问题,多思考多调试,搞定它要的只是时间。 另,clear()更正为cleardevice()因为我几乎不用graphics库,所以函数名记不太清。
页:
[1]
