
比如下面这个程序段:
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
#include
void main()
{
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
#include
void main()
{
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();
}
每一次的移动都把前一次移动的X和Y用背色填充就行了~不会有痕迹