Процедура LockDrawing;
Рисование средствами PascalABC происходит очень медленно. Пока оно идет, картинка на экране успевает много раз обновиться. Отсюда мерцание. То есть, мы видим не окончательную картинку, а процесс ее рисования. Окончательную картинку в общем-то не видим — как только она построилась, мы ее тут же стираем и начинаем новый цикл рисования. Для борьбы с этим эффектом придумали двойную буферизацию. Идея в том, чтобы сначала построить картинку в памяти (не выводя на экран), а затем отобразить новый кадр на экране целиком, без промежуточных вариантов, где не хватает половины лучиков. Для этого в начале программы вызываем процедуру LockDrawing.
Процедура ClearWindow (color);
После каждой прохода по циклу очищает графическое окно указанным цветом, который передается в качестве параметра.
После этого все команды рисования будут создавать картинку в памяти (в так называемом вторичном буфере). Непосредственно на экране ничего рисоваться не будет. После того, как очередной кадр анимации полностью отрисован (то есть перед ClearWindow), нужно вызвать процедуру
Redraw;
Эта процедура вызовет перерисовку всей картины.
uses GraphABC;
var i : integer;
begin
SetWindowSize(400,400);
LockDrawing;
//Движение от первой точки до второй
for i:=100 to 300 do
begin
SetBrushColor(clWhite);
Circle (100, 100, 20);
Circle (300, 100, 20);
Circle (100, 300, 20);
Circle (300, 300, 20);
SetBrushColor(clBlack);
Circle (i, 100, 20);
RedRaw;
ClearWindow(clWhite);
end;
//Движение от второй точки до третьей
for i:=100 to 300 do
begin
SetBrushColor(clWhite);
Circle (100, 100, 20);
Circle (300, 100, 20);
Circle (100, 300, 20);
Circle (300, 300, 20);
SetBrushColor(clBlue);
Circle (300, i, 20);
RedRaw;
ClearWindow(clWhite);
end;
//Движение от третьей точки до четвертой
for i:=300 downto 100 do
begin
SetBrushColor(clWhite);
Circle (100, 100, 20);
Circle (300, 100, 20);
Circle (100, 300, 20);
Circle (300, 300, 20);
SetBrushColor(clRed);
Circle (i, 300, 20);
RedRaw;
ClearWindow(clWhite);
end;
//Движение от четвертой точки до первой
for i:=300 downto 100 do
begin
SetBrushColor(clWhite);
Circle (100, 100, 20);
Circle (300, 100, 20);
Circle (100, 300, 20);
Circle (300, 300, 20);
SetBrushColor(clGreen);
Circle (100, i, 20);
RedRaw;
ClearWindow(clWhite);
end;
end.
Задание. Составить программу-сюжет.
Требования к сюжету:
1. Фон.
2. Случайные объекты, которые появляются в разных местах.
3. Движущиеся объекты. Количество зависит от количества людей в группе. В объектах присутствуют окружности, линии, прямоугольники.
Комментариев нет:
Отправить комментарий