-
Notifications
You must be signed in to change notification settings - Fork 0
Map
====
大体のゲームライブラリは画像の分割読み込みに対応しています。 その為、マップの画像は一つの画像にまとめて作ります。
例えば4つの画像を用意したい場合、下図のように並べます。
この画像を読み込むとき、DXRubyの場合Image.loadTiles
というメソッドを使います。
画像の分割読み込みについては後で説明します。
また下図のように横に並べても上図と同じように読み込むことができます。同様に縦に並べても同じです。
分割して読み込んだ画像は配列に0から順番に格納されます。
配列(Array)とはタンスのようなものです。 Rubyの配列は何でも入れることができますが、普通同じ性質の値をまとめて入れておくことが多いです。
配列を扱うときは[]
を使います。複数の値を予め入れる場合,
で区切ってあげます。
array = [] # 中身が空の配列
array = ["文字列"] # 要素が一つだけある配列
# 要素が複数ある配列
array = [
"文字列",
1234.56
]
上記のように記述するとarrayという配列が作られます。
イメージは下図のようになります。
一番目には文字列、二番目には数値が入っています。左側に0、1、2...と書いてありますね。 配列の中身を参照はこの0とか1という数値で参照します。
array[0] #=> "文字列"
array[1] #=> 1234.56
値を追加したい場合push
メソッドを使います。また<<
も同じように追加することができます。値は末尾に追加されます。
array.push(78.9)
array << "Hello"
array[2] #=> 78.9
array[3] #=> "Hello"
Image.loadTiles
は画像を分割して読み込み、配列に順番に入れたものを返してくれます。
マップデータは二次元配列にします。二次元配列とは表のようなものです。
二次元配列を作るのは簡単で、配列に配列を入れてあげればいいです。
例えば、
array = [
[1, 0, 0, 0],
[1, 0, 2, 0],
[1, 3, 0, 0],
[1, 0, 0, 0],
]
のような配列を作ったときに先程の画像を使ってマップを表示したとすると、
のようになります。
画像を分割して読み込むにはImage.loadTiles
を使うのでしたね。
Image.loadTiles
は3つの引数を持ちます。
Image.loadTiles( filename, xcount, ycount )
filename
はファイル名です。xcountとycountは縦横のに幾つ画像があるかを表すものです。
下図の場合、縦に2つ、横に2つに分割したいのでxcount
、ycount
はそれぞれ2を指定してあげます。
下図のように横に並べた場合、縦に1つ、横に4つに分割したいのでxcount
は4、ycount
は1を指定してあげます。
実際に記述する際は、
images = Image.loadTiles("image.png", 4, 1)
のようになります。
他のライブラリではあまり見たことがないのですが、DXRubyにはマップを描画するためのメソッドが用意されています。
マップを描画するときはWindow.drawTile
を使います。Window.drawTile
は9個の引数を持ちます。
Window.drawTile( basex, basey, map, image_arr, startx, starty, sizex, sizey, z=0 )
basex、baseyはマップを描画する画面上の左上基点位置を指定します。 描画するマップ全体をずらすことが出来るのでスクロールとか実装したい場合に活用します。
mapにはマップデータで説明した二次元配列を指定します。
image_arrにはマップ画像の読み込みで読み込んだ画像の配列を指定します。
startx、startyはマップ内の描画開始位置をピクセル単位で指定します。 これもスクロールに使えますが、画面からはみ出した部分はループして反対側に出てきます。
sizex、sizeyは描画するマップタイルの枚数を縦横の数で指定します。
zはマップの描画順を指定します。また、zは省略できます。
例えばスクロールはせずに画面にマップデータを敷き詰めたい場合、
TILE_SIZE = 32
TILE_X = Window.width / TILE_SIZE
TILE_Y = Window.height / TILE_SIZE
tiles = Image.loadTiles("map.png", 2, 2)
map_data = [ ... ]
Window.drawTile(0, 0, map_data, tiles, 0, 0, TILE_X, TILE_Y)
みたいな感じにします。
これまで出てきた要素をすべてまとめたものを用意しました。 ココ
タイルの種類を増やしてマップデータを改造してください。
Rubyで配列を扱うときに便利なメソッドが沢山用意されています。
よく使うメソッドとして、push
、pop
、insert
、delete
、shift
、first
、last
、each
、map
などがあります。
詳しくはRubyリファレンスマニュアル Arrayクラスに記述されています。
Home | 入力処理をしてみよう - マップを作ろう - 当たり判定