![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Muniz |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 1 Пол: Мужской Репутация: ![]() ![]() ![]() |
Помогите пожалуйста решить проблему с мерцанием объекта. При каждой итерации цикла объект перемещается и при этом мерцает. Как это устранить?
код:
program a1111;
uses crt,graph;
var
gd,gm:integer;
i,j:integer;c:char;
xw1,yw1,
a:integer;
k:char;
size:integer;
p:pointer;
begin; randomize;
gd:=ega;
gm:=egahi;
initgraph(gd,gm,'D:\Program files\Turbo Pascal\BGI\');
xw1:=15; yw1:=15;
{monstr1}
setfillstyle(solidfill,cyan);
setcolor(cyan);
ellipse(xw1,yw1+6,0,180,7,14);
line(xw1-7,yw1+6,xw1+7,yw1+6);
setfillstyle(solidfill,cyan);
floodfill(xw1,yw1+5,cyan);
{rot}
setcolor(black);
line(xw1-4,yw1+3,xw1+4,yw1+3);
{rot}
{nogi}
setcolor(cyan);
line(xw1-7,yw1+6,xw1-6,yw1+8);
line(xw1-5,yw1+6,xw1-6,yw1+8);
floodfill(xw1-6,yw1+7,cyan);
line(xw1-4,yw1+6,xw1-3,yw1+8);
line(xw1-4,yw1+6,xw1-3,yw1+8);
floodfill(xw1-3,yw1+7,cyan);
line(xw1+2,yw1+6,xw1+3,yw1+8);
line(xw1+4,yw1+6,xw1+3,yw1+8);
floodfill(xw1+3,yw1+7,cyan);
line(xw1+5,yw1+6,xw1+6,yw1+8);
line(xw1+7,yw1+6,xw1+6,yw1+8);
floodfill(xw1+6,yw1+7,cyan);
{nogi}
{glasa}
setcolor(white);
circle(xw1-3,yw1-3,2);
circle(xw1+3,yw1-3,2);
setfillstyle(solidfill,white);
floodfill(xw1-3,yw1-2,white);
floodfill(xw1+3,yw1-2,white);
setcolor(black);
circle(xw1-3,yw1-3,1);
circle(xw1+3,yw1-3,1);
setfillstyle(solidfill,black);
floodfill(xw1-3,yw1-3,black);
floodfill(xw1+3,yw1-3,black);
{glasa}
{monstr1}
size:=imagesize(xw1-10,yw1-10,xw1+10,yw1+10);
getmem(p,size);
getimage(xw1+10,yw1+10,xw1-10,yw1-10,p^);
setcolor(white);
line(0,0,100,0);
line(100,0,100,100);
line(100,100,0,100);
line(0,100,0,0);
repeat
putimage(xw1+10,yw1+10,p^,xorput);
delay(12);
putimage(xw1+10,yw1+10,p^,xorput);
a:=random(10)+1;
if (a=1)and(xw1>20) then begin xw1:=xw1-5; end;
if (a=2)and(xw1<70) then begin xw1:=xw1+5; end;
if (a=3)and(yw1>60) then begin yw1:=yw1-5; end;
if (a=4)and(yw1<70) then begin yw1:=yw1+5; end;
{monstr1}
setfillstyle(solidfill,cyan);
setcolor(cyan);
ellipse(xw1,yw1+6,0,180,7,14);
line(xw1-7,yw1+6,xw1+7,yw1+6);
setfillstyle(solidfill,cyan);
floodfill(xw1,yw1+5,cyan);
{rot}
setcolor(black);
line(xw1-4,yw1+3,xw1+4,yw1+3);
{rot}
{nogi}
setcolor(cyan);
line(xw1-7,yw1+6,xw1-6,yw1+8);
line(xw1-5,yw1+6,xw1-6,yw1+8);
floodfill(xw1-6,yw1+7,cyan);
line(xw1-4,yw1+6,xw1-3,yw1+8);
line(xw1-4,yw1+6,xw1-3,yw1+8);
floodfill(xw1-3,yw1+7,cyan);
line(xw1+2,yw1+6,xw1+3,yw1+8);
line(xw1+4,yw1+6,xw1+3,yw1+8);
floodfill(xw1+3,yw1+7,cyan);
line(xw1+5,yw1+6,xw1+6,yw1+8);
line(xw1+7,yw1+6,xw1+6,yw1+8);
floodfill(xw1+6,yw1+7,cyan);
{nogi}
{glasa}
setcolor(white);
circle(xw1-3,yw1-3,2);
circle(xw1+3,yw1-3,2);
setfillstyle(solidfill,white);
floodfill(xw1-3,yw1-2,white);
floodfill(xw1+3,yw1-2,white);
setcolor(black);
circle(xw1-3,yw1-3,1);
circle(xw1+3,yw1-3,1);
setfillstyle(solidfill,black);
floodfill(xw1-3,yw1-3,black);
floodfill(xw1+3,yw1-3,black);
{glasa}
{monstr1}
setfillstyle(solidfill,black);
floodfill(xw1,yw1,black);
until keypressed;
freemem(p,size);
closegraph;
readkey
end.
|
Lapp |
![]()
Сообщение
#2
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
При каждой итерации цикла объект перемещается и при этом мерцает. Как это устранить? Устранить мерцание можно, например, переключением страниц (SetActivePage, SetVisualPage). Иногда можно просто более аккуратным программированием. Но в твоей программе, извини, черт ногу сломит. Так писать такие вещи нельзя. У тебя, например, FloodFill иногда просачивается, и тогда заполняется весь экран. Вообще FloodFill лучше не использовать для движущихся объектов. Зачем ты все вырисовываешь? Сделай все только через PutImage. Если нужно - сделай несколько картинок (кадров) и плюй последовательно. И детали тоже - глаза, ноги..А вообще, схема такая: 1. Нарисовать 2. Произвести необходимые вычисления (новые координаты и т.п.) 3. Если нужно - подождать. 4. Стереть 5. Перейти к 1. И между Стиранием и Рисованием не должно быть абсолютно ничего. Я уж молчу про форматирование кода.. Бррр... -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
![]() ![]() |
![]() |
Текстовая версия | 27.07.2025 5:45 |