悬赏分:5 | 解决时间:2008-9-13 14:09 | 提问者:吥離钚棄C
怎么样才能使一个图形平移,平移不留下痕迹? 比如下面这个程序段: x=0,y=0; asd:
key=getch(); if(key==75) x=x-1;
else if(key==77) x=x+1;
else if(key==80) y=y-1;
else if(key==72) y=y+1;
circle(300+x,200+y,20);
goto asd;
我这个程序平移起来后,屏幕上全是圆的痕迹,不信你试试; 现在我就是不知道怎么样可以实现平移而不留下痕迹。
我知道可以在每次画圆之前用清屏函数或用与背景色相同的图形覆盖掉, 但是我的画面还有其他图形,清屏函数或用与背景色相同的图形覆盖掉的方法绝对不行!
那位大侠知道怎么平移?
最佳答案 第一种方法:
#include int gd=DETECT,gm,i,j,size; void *buffer; initgraph(&gd,&gm,\"\"); registerbgidriver(EGAVGA_driver); setcolor(BROWN); circle(100,100,5); circle(80,100,5); setfillstyle(1,RED); bar(72,88,107,95); setfillstyle(1,GREEN); bar(80,80,100,88); size=imagesize(71,79,108,106); buffer=malloc(size); getimage(71,79,108,106,buffer); cleardevice(); putimage(1,1,buffer,COPY_PUT); do { for(j=0;j<=450;j+=90) /*改变90,可以改变下降的大小*/ { cleardevice(); for(i=0;i<=640;i++) putimage(i+1,j+1,buffer,COPY_PUT); cleardevice(); } }while(!kbhit()); /*按任意键退出,不过要等全部走完一遍才会退出*/ closegraph(); } 第二种方法(用背景色覆盖): #include int gd=DETECT,gm,i; registerbgidriver(EGAVGA_driver); initgraph(&gd,&gm,\"\"); setfillstyle(1,GREEN); bar(50,230,60,240); while(!kbhit()) { for(i=0;i<30;i++) { delay(10000); bar(50+(i+1)*10,230,60+(i+1)*10,240); setfillstyle(1,0); bar(50+i*10,230,60+i*10,240); setfillstyle(1,GREEN); } cleardevice(); } closegraph(); } 因篇幅问题不能全部显示,请点此查看更多更全内容