XnitGraph (gd,gm,’’);
SetColor(brown);
SetFillStyle(1,brown);
FillEllipse(R,R,R,R);
Size :- ImageSize(0,0,2*R,2*R);
GetMeM(BitMap,Size); GetImage(0,0,2*R,2*R,BitMap^);
repeat
delay(Time);
Putlmage(x,y,BitMap^,1);
x:=x+Step_x; y:=y+Step_y;
if (x+2*R >= getmaxx) or (x<=0) then Step_x:=-Step_x;
if (y+2*R >= getmaxy) or (y<=0) then Step_y:=-Step_y;
Putlmage(x,y,BitMap^,1);
until keypressed;
readkey;
CloseGraph;
end.
Третій метод, що дозволяє ще зменшити миготіння мультиплікаційного об’єкта на екрані, це використання графічних сторінок. Відомо, що при ініціалізації графічного режиму ми задаємо два параметри:
Gd - тип графічного адаптера (CGA, EGA, VGA і т.д.);
Gm
Залежно від цих параметрів на екран можна виводити зображення з різною роздільною здатністю та палітрою. Крім того, існують деякі режими, що підтримують кілька графічних сторінок, кожна з яких може містити різні зображення. В один момент часу ми можемо бачити тільки одну сторінку, але в той самий момент можемо готувати складне зображення на інших сторінках і потім миттєво виводити їх на екран, зменшуючи таким чином миготіння (людина не бачить малювання окремих деталей пейзажу). Один з таких режимів Gm=VGAMed дозволяє програмісту виводити 16-кольорове зображення з роздільною здатністю 640 на 350 пікселів, при цьому він підтримує дві графічних сторінки.
Для того, щоб скористатися цими сторінками, ми можемо в програмі застосувати дві процедури:
SetActivePage(Page) - задається номер активної сторінки (Page), тобто сторінки, на якій у даний момент буде будуватися зображення;
SetVisualPage(Page) - задається номер візуальної сторінки, тобто тієї сторінки, що являється видимою в даний момент.
У запропонованому режимі існує тільки дві сторінки, що мають номера 0 та 1, тому зміну сторінок можна виконувати змінною Page
Покажемо застосування цього прийому на задачі.
Program Example_627_m;
uses crt,graph;
const g=9.8;
Color = 2; Radius =20; Time = 500;
var gd,gm:integer;
Page:byte;
Vx,Vy,X,Y:real;
begin
gd:=VGA; gm:=VGAMed; InitGraph (gd,gm,”);
Vx:=40; Vy:=30; X:=15; Y:=160;
SetColor (Color); SetFillStyle(1,Color);
repeat