Demo 10

Demo10 は、DGCStarField の説明をしている。DGCStarField は DGC の中でも特に用途が限られているコンポーネントで、流れる星の背景を描画するためにある。主に、宇宙を舞台としたアクションゲームなどで力を発揮するだろう。DGCStarField を試用する場合には、まず最初に必ず DGCScreen プロパティをセットするのを忘れないで欲しい。これは今までにも何度か書いたと思うが、非常に重要なことなので繰り返しておく。それ以外のプロパティは気がついた時にでも変えればよい。

デフォルトの動作は、「画面中央から手前に向かって、白い星が3次元的に流れてくる」となる。これは画面の解像度によらず同じになるが、星が現れる場所を画面の中央以外に変えることも出来、CenterX と CenterY プロパティがそれにあたる。このプロパティに画面上の座標を指定することによって、中心位置が変更されるのである。デフォルトの値が 9999 にセットされているが、この値にしておくと解像度に関わらず常に画面の中央を指定したことになる。

また、描画する範囲を指定することも出来る。クリンピングリージョンのようなもので、Edge... プロパティがそれにあたる。画面の一部分だけがスクロールして見えるようにすることが出来るので、試してみるとよい。なお、負の値や画面サイズより大きな数値を入れても、画面内に収まるようになっている。

Erase プロパティは星を描画する前に描画範囲を消去するかどうかを決められる。もし画面の切り替えごとに自分で明示的に画面を消去しているのなら、実行速度を考えて False に設定すべきである。また、わざと消去しないようにして残像を効果的に利用することも出来る。星の後ろに、例えば銀河や惑星のような背景を描いている場合も、当然 False にする必要がある。

StarMode プロパティは星の流れる方向を指定する。デフォルトは ThreeD となっていて、これを変更することで水平・垂直方向に星が流れる方向を変えることが出来る。任意の方向を指定できないのは少し残念であるが、もしも手前から画面中央に向かって星が流れるようにしたいのであれば、Towards プロパティで変更することが出来る。

残るプロパティは Colord 、Flashing 、NumberOfStars 、Velocity の4つで、これらの効果は実際にデモプログラムを実行することで体験できるようになっている。Colord は星に色を付けるプロパティで、Flashing は色を変化させながら星を流すプロパティである。なお、Flashing を True にした場合は Colord は無視されるようだ。NumberOfStars はその名の通り流れる星の数を指定する。流れる星は1つずつ座標と色を計算しているので、数が増えると意外に時間がかかるので注意が必要となる。Velocity は当然星の流れる速度だが、星の数が増えすぎると急に遅くなる。

以上、長々とプロパティの説明をした。簡単なので覚える必要も無いほどであるが、メソッドはもっと簡単である。まず DGCScreen の Initialize イベントなどで DGCStarField の Generate メソッドを呼び出す。後は、星を描画したくなったら Update メソッドを呼び出すだけである。Update メソッドは、座標や色の計算を行い、DGCScreen の Back サーフェイスに自動的に描画してくれる。

ここまで読めば、DGCStarField はとても扱いやすい、おそらく最も使用方法の簡単なコンポーネントだと分かってもらえただろう。しかし、実はこれだけでは話は終わらない。もう一つ重要な情報がこのデモプログラムには隠されている。

procedure TForm1.Screen1Initialize(Sender: TObject);
var
   Pal : Array[0..4] of TPaletteEntry;
   Loop : Integer;
begin
   For Loop := 0 to 4 do
   begin
     Pal[Loop].peRed   := 95 + (Loop * 40);
     Pal[Loop].peGreen := 95 + (Loop * 40);
     Pal[Loop].peBlue  := 95 + (Loop * 40);
   end;
   Screen1.Palette.SetEntries(0,240,5,@Pal);
   Stars.Generate;
   With Screen1.Back.Canvas do
   begin
        Font.Color := clRed;
        Release;
   end;
   ViewText := True;
end;
このプログラムの中には今まで一度も登場しなかった命令がある。Screen1.Palette.SetEntries がそれで、これが実に曲者の「パレット」である。現在のバージョン(β6)では、スクリーンモードは 256 色にのみ対応しているため、必然的にパレットを使用していた事になるが、これまではプログラム中で使用されているイメージのパレットをそのまま利用していた。ところが、今回は明示的にパレットの色をプログラム中で指定しているのである。

{ Demo5 プログラムです! 注意!

    :
    :

Note: The TDGCStarField component uses palette entries 240-244 to
      color the stars. 244 is the brightest star and 240 is the
      dimest. These palette entries can be set using the Image
      Library Editor and reloading the .IML file into the
      Image Library component (the .IML files do not come withe the
      demos though).
}
DGCStarField は星の色をパレットエントリの 240-244 に限定して使っているので、この部分に星の色を作ってやらねばならず、また 240 番が最も暗く、244 番がもっとも明るくなるように配色するよう指定されている。今回のデモプログラムでは、DGCImageLibrary を使っていないため、プログラム中でパレットを作って与えなければならないのだ。Palette.SetEntries はパレットの任意のエントリに任意の TPaletteEntry をセットするための命令である。

このデモに関する説明はここまでである。パレットの細かい説明は Demo16 プログラムの説明を見てもらいたい。(Demo16 ではパレットアニメーションを利用して、メガデモばりのプラズマ効果を再現しているので、DGC の可能性を知ることが出来るよい例だと思う。必見である。)

もどる