Windows WinMM Lightweight Load Library for Free Pascal / Lazarus
PetitLoader は、Free Pascal / Lazarus環境でWindows API (WinMM) をベースとした、画像描画・サウンド再生・アニメーション補間を効率化するための軽量ライブラリです。
| メソッド | 説明 |
|---|---|
constructor Create(AhWnd, AWidth, AHeight) |
インスタンスの生成。対象のウィンドウハンドルと描画バッファサイズを指定します。内部でダブルバッファ用のDCを作成します。 |
destructor Destroy |
インスタンスの破棄。バックバッファ、ビットマップ、DCなどのGDIリソースをすべて安全に解放します。 |
ビットマップの読み込みと転送を行います。TargetDC には通常 TPetitDraw.BackDC を渡します。
| メソッド | 説明 |
|---|---|
LoadBMP(FileName): HBITMAP | BMPファイルを読み込みハンドルを返します。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.dll の TransparentBlt を使用。 |
SetClipRect(x, y, w, h) | 描画領域を制限します。枠外へのはみ出し防止に使用します。 |
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の値でシステム音量を設定します。 |
GetEasing(t: Single; Easing: TEasingType): Single
時間 t (0.0 ~ 1.0) を渡すと、指定されたアルゴリズムで補間された値を返します。
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;
// 描画ループ内での使用例
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;