Sample 1

DownLoad Sample1 program

DGC のヘルプファイルは、現時点(β6)ではまだ完全ではない。DGC のデモプログラムがカバーしている範囲もまた完全ではなく、このデモだけですべての機能を説明するのは難しい。Sample は、このページの作者であるおりいるが自分で実験して調べた内容を、できるだけ単純なソースを用いて説明していくために作った、オリジナルのデモプログラムである。Sample1 は、Demo17 の中で初めて登場する DGCMapLib の使い方について説明した物である。

DGCMapLib を使うためには、次の順で下準備をする必要がある。順番に簡単に見ていくことにしよう。
  マップのタイルパターンとなるビットマップを作る。(イメージエディタなど)
  ビットマップからイメージライブラリを作る。(イメージライブラリエディタ)
  ビットマップをならべて、マップを作成する。(マップエディタ)
作業はまず、タイルパターンとなるビットマップを描くところから始まる。ビットマップなのでどんなツールを使っても良いが、サイズが小さいのでデルファイに標準でついてくるイメージエディタなどでも簡単に作ることができるだろう。ここで作るイメージのサイズは、任意のサイズを選ぶことができるが、すべてのタイルパターンのサイズを同じにしておかないと後で奇麗に並べることができなくなる。

タイルパターンが完成したら、今度はイメージライブラリに登録することになる。特に新しい作業は無いので簡単にできると思うが、イメージライブラリエディタの使い方については Demo2 を見ていただきたい。

さて、タイルパターン用のイメージライブラリを作り終えたところで、やっとマップエディタの登場となる。マップライブラリを作るためには、DGC Map Editor を起動し、「Load Image Library」を選んで、先ほど作ったタイルパターン用のイメージライブラリを読み込む。次に左下の「Insert New Map」を押しすと、マップを作成することができるようになる。後は右のタイルパターンの中から任意のイメージを選択し、中央の画面に並べていくだけで良い。同じようにして複数のマップを登録しておくと、後で切り替えて使うこともできる。ただし、マップをインサートするときに選んだサイズは、後から変更がきかないようなので注意して欲しい。

マップライブラリをセーブしたら、下準備は殆ど終わったことになる。後は DGCScreen に MapLibrary と TileLibrary を登録するだけである。これもフォーム上に DGCScreen と DGCImageLib と DGCMapLib が乗っていれば、DGCScreen のプロパティとしてドロップダウンして選ぶだけでよい。ここまでの説明の中に、コードを書く作業が含まれていないに注目して欲しい。大事な部分に集中するためには、余計な作業は少なく簡単であり、ソースもすっきりしている方が良いに決まっているのである。

procedure TForm1.DGCScreen1Flip(Sender: TObject);
begin
  if (c=0) then begin
    if DGCScreen1.KeyDown(VK_RIGHT) and (x < 44) then begin
      u := 1;
      c := 32;
    end;
    if DGCScreen1.KeyDown(VK_LEFT) and (x > 0) then begin
      u := -1;
      c := 32;
    end;
    if DGCScreen1.KeyDown(VK_DOWN) and (y < 49) then begin
      v := 1;
      c := 32;
    end;
    if DGCScreen1.KeyDown(VK_UP) and (y > 0) then begin
      v := -1;
      c := 32;
    end;
  end;

  if c > 0 then begin
    sx := sx - u*2;
    sy := sy - v*2;
    dec(c,2);
    if c=0 then begin
      x := x + u;
      y := y + v;
      u := 0;
      v := 0;
    end;
  end;

  DGCScreen1.DrawMap(DGCScreen1.Back,0,0,0,sx,sy,false);

  with DGCScreen1.Back.Canvas do begin
    Brush.Style := bsClear;
    Font.Size := 24;
    Font.Color := clWhite;
    TextOut(200, 200, 'Map Libraly Sample');
    Release;
  end;
end;

これはこのサンプルプログラムのメインとなる OnFlip イベントの中身である。マップを描画するためには、DGCScreen の DrawMap を呼び出すことになる。DGCMapLib 自身には、ファイル入出力以外に重要なメソッドは存在しない。

  DGCScreen1.DrawMap(DGCScreen1.Back,0,0,0,sx,sy,false);

DrawMap メソッドの引数は、描画するサーフェイス、DGCMapLib の中のマップのインデックス、マップの原点となるタイルの座標 X,Y 、マップを描画する先のスクリーンの座標 X,Y 、透過処理の有無となる。2重スクロールなどの場合、手前に重ねるレイヤーでは最後の引数は True に設定することになる。

しかし、もしも透過する部分の方が描画部分よりも多い場合などは、透明なタイルを並べるよりも特定のタイルパターンのときに描画しないようにした方が良いことになる。そのためのプロパティが DGCScreen の SkipTile0 である。このプロパティに True を設定しておくと、0番のタイルパターンをスキップし、その分高速に画面を描画することが出来るようになるのである。

OnFlip イベントの前半は、カーソルキーの入力のためにある。画面が表示されてから、カーソルを押すことで画面を動かすことが出来るので試してみて欲しい。難しいことは何もしていないので、ここでは説明を省かせてもらう。

以上で、Sample 1 プログラムの説明を終わる。出来るだけ単純なプログラムを作ったつもりなので、DGCMapLib の使い方を見るには適していると思うがどうだろうか?

もどる