TDXImageList 是 DelphiX 提供的圖片容器,支援 .dxg 專屬格式與多種標準圖片格式(透過設計時編輯器)。本文示範最簡單的四行程式碼載入並繪製圖片。
procedure TForm1.Button1Click(Sender: TObject);
begin
DXImageList1.Items.LoadFromFile('C:\Temp\DelphiX.dxg');
DXImageList1.DXDraw := DXDraw1;
DXImageList1.Items[0].Draw(DXDraw1.Surface, 10, 10, 0);
DXDraw1.Flip;
end;
.dxg 及部分 .bmp,相容性較差。TDXImageList 繼承自 TComponent,可從 TImage、TBitmap 複製圖片。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DXDraws, DXClass;
type
TForm1 = class(TForm)
DXDraw1: TDXDraw;
DXImageList1: TDXImageList;
Button1: TButton; { 顯示第 0 張 }
Button2: TButton; { 顯示第 1 張 }
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
DXImageList1.DXDraw := DXDraw1; { 關鍵:指定繪圖目標 }
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
{ Draw(目標表面, X, Y, 調色盤索引) }
DXImageList1.Items[0].Draw(DXDraw1.Surface, 10, 10, 0);
DXDraw1.Flip;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
DXImageList1.Items[1].Draw(DXDraw1.Surface, 10, 10, 0);
DXDraw1.Flip;
end;
end.
若無 .dxg 檔案,可下載範例素材:
https://files.cnblogs.com/del/DelphiX_img.rar
解壓至 C:\Temp\ 即可直接執行。
DXImageList1.DXDraw := DXDraw1 必須在 FormCreate 或設計時設定,否則 Draw 會因無目標表面而無效果。Flip 將後台 Surface 內容翻轉到前台 Primary,實現雙緩衝無閃爍繪圖。TDXImageList 讓 DelphiX 專案像使用 TImageList 一樣管理遊戲素材。善用設計時編輯器匯入多格式圖片,配合 Items[Index].Draw 即可高效完成 2D 遊戲繪圖需求。