unit animtut1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  dddd, ddddut, ddraw, ExtCtrls;

type
  TForm1 = class(TForm)
    DDDD1: TDDDD;
    Timer1: TTimer;
    procedure DDDD1Init(Sender: TObject; fNeedChange: Boolean);
    procedure Timer1Timer(Sender: TObject);
    procedure FormClick(Sender: TObject);
    procedure DDDD1Destroy(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
    Surf1:TDDDDSurface;
    Spr:TDDDDSprite;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.DDDD1Init(Sender: TObject; fNeedChange: Boolean);
var
  i:Integer;
begin
  //作業用サーフェスを作る
  Surf1:=TDDDDSurface.Create(DDDD1, 320,64, 255);

  //BMPとパレットの読み込み
  Surf1.LoadBMP('hero.bmp');
  Surf1.ColorKey:=Surf1.Pixels[0,0];  //左上のピクセルをカラーキーに

  DDDD1.ReadPalette('hero.bmp');
  DDDD1.UpdatePalette;

  //スプライト管理オブジェクトの生成
  Spr:=TDDDDSprite.Create(1,5); //スプライトの最大表示数は1 最大シェイプ数は5

  //パレットの初期化
  DDDD1.ReadPalette('hero.bmp');
  DDDD1.UpdatePalette;

  //スプライトの設定

  //シェイプへ登録
  For i:=0 to 4 do begin
    Spr.SetShape(i, Surf1, Rect(i*64,0,(i+1)*64,64) );  //1パターンは64x64ドット
  end;

  //スプライト表示テーブルの登録
  with Spr[0] do begin
    IShape:=0;     // IAnim=0 の時、Spr[0]はシェイプ#0を表示
    MinAnim:=0;    // IAnimの下限は+0
    MaxAnim:=+4;   // IAnimの上限は+4
    RewindAnim:=True; //往復アニメーションをする(Falseだと片道)
    Visible:=True;  // デフォルトはFalseなので、Trueを設定しないと隠れっぱなしです

    X:=320;         //位置は適当に
    Y:=240;
  end;
  // Spr[0].NextFrameを繰り返し呼ぶ事で、IAnimは0〜+4の間を往復し、
  // それに応じてSpr[0].Shapeが0〜4(0+0〜0+4)として表示されます。

end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  DDDD1.Clear;        //バックバッファを消去
  Spr[0].NextFrame;   //アニメーションを進める
  Spr.Update;         //スプライトの様子をバックバッファに書き込む
  DDDD1.Flip;         //バックバッファを見えるようにする
end;

procedure TForm1.FormClick(Sender: TObject);
begin
  //クリックされたらRewindAnimをトグルする
  Spr[0].RewindAnim:=not Spr[0].RewindAnim;

  //フォームのキャプションに現在RewindAnimがどうなっているのかｶ表示
  Caption:='RewindAnim = ';
  if Spr[0].RewindAnim then
    Caption := Caption + 'True'
  else
    Caption := Caption + 'False'

end;

procedure TForm1.DDDD1Destroy(Sender: TObject);
begin
  Surf1.Free;
  Spr.Free;
end;

end.
