PetitLoader v1.0

Windows WinMM Lightweight Load Library for Free Pascal / Lazarus

概要

PetitLoader は、Free Pascal / Lazarus環境でWindows API (WinMM) をベースとした、画像描画・サウンド再生・アニメーション補間を効率化するための軽量ライブラリです。

1. 生成と破棄

メソッド説明
constructor Create(AhWnd, AWidth, AHeight) インスタンスの生成。対象のウィンドウハンドルと描画バッファサイズを指定します。内部でダブルバッファ用のDCを作成します。
destructor Destroy インスタンスの破棄。バックバッファ、ビットマップ、DCなどのGDIリソースをすべて安全に解放します。

2. 画像描画機能

ビットマップの読み込みと転送を行います。TargetDC には通常 TPetitDraw.BackDC を渡します。

メソッド説明
LoadBMP(FileName): HBITMAPBMPファイルを読み込みハンドルを返します。LR_CREATEDIBSECTION を使用し、高速な描画を可能にします。
FreeBMP(var hBmp)画像をメモリから解放し、変数を0にリセットします。
DrawImagePart(TargetDC, hBmp, dx, dy, dw, dh, sx, sy, sw, sh)画像の一部を転送。StretchBlt による拡大縮小に対応。
DrawImageTransparent(TargetDC, hBmp, dx, dy, dw, dh, sx, sy, sw, sh, TransColor)特定の色を透過して描画。msimg32.dllTransparentBlt を使用。
SetClipRect(x, y, w, h)描画領域を制限します。枠外へのはみ出し防止に使用します。

3. オーディオ機能

WinMM (MCI) を使用し、外部DLL不要でサウンドを再生します。

メソッド説明
PlaySE(FileName)効果音(WAV)の非同期再生。即座に制御を戻します。PlaySE は内部的に4つの再生スロットを巡回して利用します。これにより、最大4つまでの効果音を同時に重ねて再生可能です。5つ目以降が再生されると、最も古いスロットから順に上書きされます。
PlayBGM(FileName, Loop)BGM(MIDI/MP3/WAV)の再生。LoopがTrueなら repeat 指定で再生します。
StopBGM再生中のBGMを停止し、MCIデバイスを閉じます。
SetVolume(Volume)0〜1000の値でシステム音量を設定します。

4. アニメーション補助 (Easing)

GetEasing(t: Single; Easing: TEasingType): Single

時間 t (0.0 ~ 1.0) を渡すと、指定されたアルゴリズムで補間された値を返します。

5. 衝突判定 (Collision Detection)

2つのオブジェクト(矩形)が重なっているかどうかを判定します。Windows APIの IntersectRect を利用した高速な判定です。

メソッド説明
CheckCollision(x1, y1, w1, h1, x2, y2, w2, h2): Boolean 矩形A(x1, y1, 幅w1, 高h1) と 矩形B(x2, y2, 幅w2, 高h2) の衝突を判定します。
戻り値: 重なっている場合は True、離れている場合は False
        // 衝突判定の使用例(自機と敵の当たり判定)
if Loader.CheckCollision(PlayerX, PlayerY, 32, 32, EnemyX, EnemyY, 32, 32) then
begin
  Loader.PlaySE('explosion.wav');
  ShowMessage('ゲームオーバー!');
end;

6. 実装例 (PetitDraw2との連携)

        // 描画ループ内での使用例
procedure OnUpdate;
begin
  Draw.Clear(RGB(0, 0, 0));
  // Loaderを使用してDrawのバッファへ描画
  Loader.DrawImageTransparent(Draw.BackDC, hPlayerBmp, x, y, 32, 32, 0, 0, 32, 32, clFuchsia);
  Draw.Present;
end;