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

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

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

> Мультфильм на Turbo Pascal. Требуется альтернатива cleardevice. Как очистить только последний вставленный кадр?
tdAvenger
сообщение 7.11.2012 0:23
Сообщение #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 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 



- Текстовая версия 20.07.2025 2:34
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"