Двойная буферизация на Delphi

Очень давно пользуюсь данным кодом, что бы выводить двухмерную графику на канву:

Var
Sprites : array of TBitmap;
Page : TBitmap;

// Добавление/загрузка спрайта
function Sprite_Add(const FileName: string): TBitmap;
begin
SetLength(Sprites, Length(Sprites) + 1);
Result := TBitmap.Create;
Result.LoadFromFile(FileName);
Result.PixelFormat := pf24bit;
Sprites[Length(Sprites) — 1] := Result;
end;

// Отрисовка спрайта
procedure Sprite_Draw(x, y, idx: integer);
begin
Sprites[idx].Transparent := true;
Sprites[idx].TransparentColor := clLime; // ярко зелёный
Page.Canvas.Draw(x, y, Sprites[idx]);
end;

// Инициализация
procedure Init;
begin
Sprites := nil;
Page := TBitmap.Create;
Page.PixelFormat := pf24bit; // 24 битный цвет
Page.Canvas.Brush.Color := clmedgray; // цвет закраски фона

// Грузим спрайты
Sprite_Add(‘0.bmp’); // 0
Sprite_Add(‘1.bmp’); // 1
Sprite_Add(‘2.bmp’); // 2
end;

// Освобождение ресурсов
procedure Free;
var
i : integer;
begin
for i := 0 to Length(Sprites) — 1 do
Sprites[i].Free;
Sprites := nil;
end;

// Отрисовка
procedure Draw;
begin
with Form1 do
begin
// Выставляем размеры буфера кадра в памяти
Page.Width := ClientWidth;
Page.Height := ClientHeight;
// Затираем содержимое в буфере цвета
Page.Canvas.FillRect(Rect(0, 0, ClientWidth, ClientHeight));
// Рисуем спрайты
Sprite_Draw(x,y, 0);

// Показываем то что нарисовали игрокуCanvas.Draw(0, 0, Page);
end;
end;

Запись опубликована в рубрике Програмирование с метками . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован.