![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
tdAvenger |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 1 Пол: Мужской Репутация: ![]() ![]() ![]() |
Возникла проблемка при написании мультфильма на Паскале. Очень надеюсь на Вашу помощь. Дело в том, что при смене кадра(для имитации движения),дабы удалить предыдущий кадр, приходится использовать процедуру 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. Заранее благодарю за любые идеи по реализации. |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 2:34 |