1.3. Активная и отображаемая страницы

Для функций изображения графических элементов (таких, например, как line, lineto, putpixel) видеопамять разбита на страницы, количество которых зависит от номера графического драйвера и режима. Каждая такая функция может производить  вывод только в страницу, называющуюся активной. Чтобы изменить номер активной страницы, употребляется функция voidsetactivepage(intpagenum), где pagenum — номер активизируемой страницы. При инициализации графического режима номер активной страницы устанавливается на нуль. Если требуется очистить активную страницу, то применяется функция voidcleardevice(void). Заметим, что функция cleardevice устанавливает CP в (0,0)

На экране отображается страница, которая не обязательно является активной. Чтобы установить номер страницы, отображаемой на экране, применяется функция voidsetvisualpage(intpagenum), где pagenum — номер страницы, которая становится отображаемой (видимой).

Данные функции применяются для мультипликации. Для примера рассмотрим программу изображения треугольника, движущегося в горизонтальном направлении

#include <graphics.h>

#include <conio.h>

#include <dos.h>

// Построение треугольника

void trirel (int dx1, int dy1, int dx2, int dy2)

{

int x=getx(), y=gety();

linerel(dx1, dy1); moveto(x, y);

linerel(dx2, dy2);

line(x+dx1, y+dy1, x+dx2, y+dy2);

}

main()

{

int gdriver=DETECT, gmode, npage=0;

float x0=0, y0=100, x1=70, y1=100, x2=100, y2=0;

float x=x0, y=y0;

// Инициализация графического режима

initgraph(&gdriver, &gmode, "D:\BC\BGI");

while(!kbhit())

      {

      npage++;

// Выбор в качестве активной страницы

// с номером npage%2

      setactivepage(npage%2);

      cleardevice();

      moveto(x,y);

     

// Вывод треугольника

trirel(x1-x0, y1-y0, x2-x0, y2-y0);

     

// Выбор в качестве видимой страницы

// с номером npage%2

setvisualpage(npage%2);

      delay(20);

      x++;

      }

getch();

closegraph();

}