注册 登录
编程论坛 C图形专区

[求助]百思不得其解????????

pjbpage 发布于 2006-10-26 17:31, 841 次点击

#include "graphics.h"
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
void main()
{
void *w;
int driver,mode,i,b;
driver = VGA;
mode = VGAMED;
initgraph(&driver,&mode,"D:\\TC201E\\BGI");
cleardevice();
setbkcolor(3);
setcolor(4);
circle(430,300,30); //*画自行车*//
circle(510,320,10);
arc(460,320,0,90,50);
arc(430,270,270,360,30);
ellipse(460,265,180,360,7,5);
line(430,300,440,250);
circle(440,246,4);
w = malloc(imagesize(400,200,520,330));
getimage(400,200,520,330,w);
for(i=400;i>0;i--) //*让自行车从右向左动起来*//
{
putimage(i-1,200,w,COPY_PUT);
line(2,330,630,330);
}
getch();
closegraph();
} 
为什么运行时自行车后会生成一条红色粗线,请问高手怎样把那红色粗线去掉??????

6 回复
#2
一笔苍穹2006-10-26 17:53
两次putimage之间没有擦除原来的单车,留下了重影。
可以在
putimage(i-1,200,w,COPY_PUT);
line(2,330,630,330);
后面加个delay,再画上一个与背景同色与getimage获得的矩形同尺寸的实心矩形,以“擦除”原来的图像。
#3
pjbpage2006-10-26 22:08

为什么有些类似的程序(没加delay)中并不会留下重影而在这个程序中留下重影呢,能讲个理由吗?

#4
pjbpage2006-10-26 22:21
发表的高手们给意见时最好能同时给上代码,谢谢,万分感谢
#5
pjbpage2006-10-26 22:43

好像还是不行

#6
一笔苍穹2006-10-27 10:25
这程序的关键并不在delay,而是你在画下一张之前并未将前一张以背景色清除,delay只是为了让清除和显示之间有一个停顿,不用对程序的逻辑结构无任何影响。
如果你觉得我说的无法实现的话,也可以使用一个偷懒的法子:把以上代码中的数字520全部换成521,这算是一个偏方吧^_^
#7
pjbpage2006-10-27 12:06

偏方很灵,你很强啊,谢谢了

1