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

DelphiX 實戰:TDIB.DoNovaEffect 新星/光暈特效

     編輯:Delphi

TDIB.DoNovaEffect 產生類似恆星閃耀、新星爆發的放射狀光暈效果,參數極多且效果強烈,適合太空遊戲、魔法特效、場景轉場。本文提供完整參數實例範例。

效果預覽

DoNovaEffect 效果

核心程式碼

unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DIB, StdCtrls;
type
  TForm1 = class(TForm)
    DXPaintBox1: TDXPaintBox;
    Button1: TButton; // 載入圖片
    Button2: TButton; // 觸發新星效果
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  end;
var Form1: TForm1;
implementation {$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
const ImgPath1 = 'C:\Temp\DX.jpg';
begin
  DXPaintBox1.DIB.LoadFromFile(ImgPath1);
  DXPaintBox1.Width := DXPaintBox1.DIB.Width;
  DXPaintBox1.Height := DXPaintBox1.DIB.Height;
  DXPaintBox1.Repaint;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  // DoNovaEffect(Rays, RayLen, Brightness, CX, CY, AngleOffset, ScaleX, ScaleY, Seed1, Seed2, Palette)
  DXPaintBox1.DIB.DoNovaEffect(16,   // 光線數
    48,   // 光線長度
    255,  // 亮度
    DXPaintBox1.DIB.Width div 3,   // 中心 X
    DXPaintBox1.DIB.Height div 3,  // 中心 Y
    18,   // 角度偏移
    1,    // X 縮放
    1,    // Y 縮放
    2782, // 隨機種子 1
    2585, // 隨機種子 2
    nil); // 調色盤(nil=預設)
  DXPaintBox1.Repaint;
end;
end.

參數詳細解析

參數名稱影響建議範圍
Rays光線數放射線條數量8~64
RayLen光線長度從中心延伸像素數10~200
Brightness亮度光線最高亮度0~255
CX, CY中心座標效果發散原點畫面範圍內
AngleOffset角度偏移整體旋轉角度0~360
ScaleX, ScaleY縮放橢圓度控制0.1~5.0
Seed1, Seed2隨機種子光線抖動/分支模式任意整數
Palette調色盤顏色映射表,nil=白光TDIB 或 nil

效果特性

  • 程序化生成,每次參數相同結果固定(種子決定)
  • 光線帶隨機分支/抖動,極具有機感
  • 高亮度下會過曝周圍像素,形成強烈發光感
  • 就地修改 DIB,不可逆

應用場景

  • **太空遊戲**:恆星、超新星、傳送門、雷射武器
  • **魔法特效**:召喚陣、傳送、神聖爆發
  • **場景轉場**:畫面中心爆發遮蓋切換
  • **UI 強調**:重要按鈕/成就解鎖瞬間綻放

動畫化:脈動恆星


var Frame: Integer = 0;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  DXPaintBox1.DIB.Assign(OriginalDIB);
  Frame := Frame + 1;
  DXPaintBox1.DIB.DoNovaEffect(
    12 + Sin(Frame*0.1)*4,      // 光線數脈動
    30 + Cos(Frame*0.05)*20,    // 長度脈動
    200 + Sin(Frame*0.2)*55,    // 亮度脈動
    CX, CY, Frame * 2,          // 緩慢旋轉
    1, 1, 2782+Frame, 2585-Frame, nil);
  DXPaintBox1.Repaint;
end;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved