首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

DelphiX 入門(3):TDXDraw 雙緩衝繪圖表面與 GDI 混合繪圖

     編輯:Delphi

核心概念:雙緩衝與 Flip

TDXDraw 內建兩個繪圖表面:

  • Surface:後台表面(Off-screen),所有繪圖操作在此進行。
  • Primary:前台表面(On-screen),直接顯示在螢幕上。

Flip 方法瞬間交換兩表面指標,實現無閃爍動畫。DirectX 只交換指標,速度極快。

GDI/GDI+ 混合繪圖

DXDraw1.Surface.Canvas 提供 TCanvas 介面,可使用 TextOut、Ellipse、Draw 等 GDI 函數。使用後必須呼叫 Release 釋放鎖定。

效能提醒:混合 GDI 會降低 DirectX 效能,但比純 GDI 仍快;純 DirectX 繪圖(IDirectDrawSurface::Blt、IDirect3DDevice)效能最佳。

完整範例:兩種寫法在 Surface 顯示時間

TDXDraw 顯示時間

單元程式碼

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DXDraws;

type
  TForm1 = class(TForm)
    DXDraw1: TDXDraw;
    Button1: TButton;  { 完整寫法 }
    Button2: TButton;  { with 簡化寫法 }
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  str: string;
begin
  str := FormatDateTime('h:n:s:zz', Time);  { 精確到毫秒 }
  DXDraw1.Surface.Fill($FF0000);            { 紅色背景,HTML 色序 RRGGBB }
  DXDraw1.Surface.Canvas.Brush.Style := bsClear;
  DXDraw1.Surface.Canvas.Font.Color := clYellow;
  DXDraw1.Surface.Canvas.Font.Size := 16;
  DXDraw1.Surface.Canvas.TextOut(10, 10, str);
  DXDraw1.Surface.Canvas.Release;           { 必須釋放 }
  DXDraw1.Flip;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  str: string;
begin
  str := FormatDateTime('h:n:s:zz', Time);
  DXDraw1.Surface.Fill(0);                  { 黑色背景 }
  with DXDraw1.Surface.Canvas do
  begin
    Brush.Style := bsClear;
    Font.Color := clLime;
    Font.Size := 16;
    TextOut(10, 10, str);
    Release;
  end;
  DXDraw1.Flip;
end;

end.

色彩格式注意

DirectX 使用 HTML 色序 (RRGGBB),非 Delphi TColor (BBGGRR)。

  • 紅色:$FF0000(非 clRed = $0000FF)
  • 綠色:$00FF00
  • 藍色:$0000FF
  • 白色:$FFFFFF,黑色:0

常用繪圖流程模板

if DXDraw1.CanDraw then
begin
  DXDraw1.Surface.Fill(背景色);
  with DXDraw1.Surface.Canvas do
  begin
    { GDI 繪圖指令 }
    Release;
  end;
  { 或純 DirectX Blt/Render 指令 }
  DXDraw1.Flip;
end;

結語

掌握 Surface/Primary 雙緩衝機制、Flip 瞬間交換、Canvas GDI 混合繪圖與色彩格式轉換,是 DelphiX 2D 遊戲繪圖的基石。後續將介紹 TDXImageList 素材管理與 TDXSpriteEngine 精靈系統。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved