画像ファイルを指定した位置へ表示


●基本のイメージ表示

まずはオブジェクト。AdditionalImage
 をFORMに貼る。サイズを調整した後、画像の指定。

指定方法は、ImageインスペクタのPictureを選択し
(なし)の横にある「・・・」をクリック。
出てきたウインドウの読み込みボタンを押して画像を指定する。

指定できる画像の形式はJPEG、BMP、ICOなど。
OKを押せばそのまま画像が表示される。

●裏イメージから表イメージへコピー

動かした絵がちらつかない為に良く使われるのが
表示させていない裏のイメージへ全部描いておいて
表のイメージへ一気にコピーする方法。

これはまずFORMへ表用と裏用の2枚のイメージを貼っておき
裏イメージのインスペクタ、VisibleTrueからFalseにする。

Visibleは実行中にそのイメージを表示するかしないかの設定であり
Falseにすることで、表示させたくない絵を表示しなくてすむようになる。
そうしておいて
omoteGa.Canvas.Draw(0,0,uraGa.Picture.Graphic);
と実行する。意味は
omoteGaCanvas(表示部)へDraw(描く)という命令で
()内の0,0は位置指定。
uraGaPictureGraphicがコピー元指定。

omoteGauraGaは、Image1と2の名称を変更し
判りやすくした名前。ここの指定を変えることで
コピー元とコピー先の指定を変更できる。

実際に絵を動かすやり方はゲーム応用編のほうで。

●イメージリストを使用した複数イメージの表示

絵を動かす時など、同じサイズの絵を何枚も使用したい場合
イメージリストを使用するのが便利。やりかたは

まず、元となる絵をBMP形式で用意しておき
Win32ImageList  をFORMに貼り付ける。

インスペクタのHeight(高さ)とWidth(幅)が16になっているので
用意した画像の高さと幅に合わせる。後からここを変更すると
セットしたイメージリストが全てキャンセルされるので注意。

ちゃんと縦横を合わせてから続いてをダブルクリック。
出てきたウインドウの「追加」ボタンを押してイメージを追加していく。

オプションは「そのまま」。透過色指定は指定した色を
貼り付ける時に透明にしてくれる。指定はイメージごとに変更可。
透過させたく無い場合はclNoneを選ぶ。
ここまでの準備が完了したら、プログラムで描画指令をする。
ImageList1.draw(Image1.Canvas,10,25,1);
ImageList1draw(描く)
描く場所はImage1.Canvas。位置はx方向10ドット、y方向25ドット。
イメージの番号は1番。

これで1の画像が表示される。

●イメージリストを使用しない複数イメージの表示

イメージリストを使用しなくても複数のキャラを表示させる方法はある。
まず、複数キャラの画像を1枚にした画像を用意し
イメージとしてFORMへ貼り付けておく。
名前は自由だが今回はchipsetに。

続いて、どの位置にあるイメージが何番のイメージかを指定する。
今回はサンプルで01のみ指定。
var
 xPos :Integer; //表示の横位置
 yPos :Integer; //表示縦位置
 num1Rect:TRect; //コピー元
 setRect:TRect; //コピー先
begin
 xPos := 2;
 yPos := 3;
 num1Rect := Rect(0,0,24,24); //元絵の左、上、右、下を位置指定
 setRect := Rect(xPos*24,yPos*24,xPos*24+24,yPos*24+24);

Image1.Canvas.CopyRect(setRect,chipset.Canvas,num1Rect);
これで下のように表示される。

RECTとは四つのInteger変数を一つにまとめた変数で
画像の位置表示のためによく使われる。

setrectで24倍しているのは、1キャラが縦横24ドットだから。
こうすることで余計な計算をせず、変更も楽になり、ミスも減る。

今回は一つだけの指定だったので、直接指定したが
実際にゲームで使用する場合、numRect :array[1..25] of Rect;
のように、配列でRectを宣言し、FOR文のループで
位置データーを放り込んで使用される。
こうすれば元画像の位置をnumRect[18]のように
番号のみで使用できるので便利。

最後の行が実際の表示命令。
Image1CanvasCopyRect(位置指定描画)する。
カッコ内は(コピー元位置、コピー元画像、コピー先位置)

この方法は、イメージリストを使うにはあまりにも数が多く
対処できないものに使用される。
具体的にはRPG背景のMAPがそれに適合。

 戻る