IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Мультфильм на Turbo Pascal. Требуется альтернатива cleardevice. Как очистить только последний вставленный кадр?
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 1
Пол: Мужской

Репутация: -  0  +


Возникла проблемка при написании мультфильма на Паскале. Очень надеюсь на Вашу помощь. Дело в том, что при смене кадра(для имитации движения),дабы удалить предыдущий кадр, приходится использовать процедуру cleardevice, которая в свою очередь полностью очищает экран. Проблема заключается в том, что удаляются все нарисованные элементы, включая статические объекты, которые по замыслу двигаться не должны(дорога, дома, деревья и т.п.). Единственное, что смог придумать на данный момент, это прописывать статический объект после каждого cleardevice'а (на примере дороги в коде). Но это жутко не удобно(например, при редактировании) и существенно увеличит объем кода, учитывая, что помимо дороги там планируется еще с десяток аналогичных объектов. Может быть cleardevice можно чем-нибудь заменить, чтобы очищался именно последний(только что вставленный) кадр? Или может быть посоветуете как переписать код программы, чтобы данную задумку реально было бы осуществить. Пытаюсь найти что-нибудь полезное в гугле, но пока безрезультатно.

Код
uses graph,crt;
var Gd,Gm :Integer;
    x,y,step, k:integer;
begin
Gd:= detect;
InitGraph(Gd,Gm,'');
setbkcolor(lightgray);
x:=30;
y:=200;
step:=10;

{дорога}
SetFillStyle(1,white);
bar(0,y+85,getmaxx,y+88);


repeat


{1 кадр}
setcolor(red);
setlinestyle(0,0,1);
setfillstyle(1,red);
fillellipse(x,y,13,40); {тело}
circle( x,y-60,20); {голова}
setlinestyle(0,0,3);
line(x-5,y+37,x-25,y+80); {левая нога}
line(x-25,y+80,x-15,y+85); {левая тапка*}
line(x+5,y+37,x+25,y+85); {правая нога}
line(x+25,y+85,x+35,y+85);  {правая тапка*}
Setcolor(blue);
setlinestyle(0,0,3);
line(x-3,y-20,x-20,y+5); {рука 1}
line(x-20,y+5,x-3,y+20); {рука 2}
setlinestyle(0,0,1);
arc(x-22,y+20,340,20,20); {карман}
setfillstyle(1,brown);
setcolor(brown);
pieslice(x,y-60,210,20,20); {волосы}
setcolor(darkgray);
setfillstyle(1,white);
pieslice( x+13,y-60, 0,360,2);
putpixel(x+13,y-59, darkgray);
putpixel(x+14,y-59, darkgray);
putpixel(x+14,y-60, darkgray);
line(x+16,y-50,x+8,y-50);
delay(100);
x:=x+step;
cleardevice;
{дорога}
SetFillStyle(1,white);
bar(0,y+85,getmaxx,y+88);
{2 кадр}
setcolor(red);
setlinestyle(0,0,1);
setfillstyle(1,red);
fillellipse(x,y,13,40); {тело}
circle( x,y-60,20); {голова}
setlinestyle(0,0,3);
line(x,y+37,x,y+85); {левая нога}
line(x,y+85,x+10,y+85); {левая тапка}
Setcolor(blue);
setlinestyle(0,0,3);
line(x-3,y-20,x-20,y+5); {рука 1}
line(x-20,y+5,x-3,y+20); {рука 2}
setlinestyle(0,0,1);
arc(x-22,y+20,340,20,20); {карман}
setfillstyle(1,brown);
setcolor(brown);
pieslice(x,y-60,210,20,20); {волосы}
setcolor(darkgray);
setfillstyle(1,white);
pieslice( x+13,y-60, 0,360,2);
putpixel(x+13,y-59, darkgray);
putpixel(x+14,y-59, darkgray);
putpixel(x+14,y-60, darkgray);
line(x+16,y-50,x+8,y-50);
delay(200);
x:=x+step;

if x=310 then
   begin
   {дорога}
SetFillStyle(1,white);
bar(0,y+85,getmaxx,y+88);
   {procedure svetofor}
    delay(3000);
    
    x:=x+step;    
      end;

cleardevice;
{дорога}
SetFillStyle(1,white);
bar(0,y+85,getmaxx,y+88);
until keypressed;
Closegraph;
end.



Заранее благодарю за любые идеи по реализации.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Только запоминать предпоследний кадр в буфер (GetImage, PutImage).


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 15.05.2024 3:22
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name