2017 ソフトウェア設計及び演習用の班Wiki
17::gr07::マップの作り方
他の班員の協力のため,マップの作成方法を記しておきます
1.マップ画像の作成
マップのしくみは画像を背景として表示してその上をキャラが移動しています.
よってマップの画像が必要です.
わたしはお手軽なのでこのサイトで作りました
http://flash-game-ziina.com/development/mapeditor/
マップサイズは横20縦15,チップサイズは32 x 32です.計算すると640 x 480になります.
あとは感覚でできると思います.マップができたら[画像を出力]を押して名前をmapX.png(Xには対応するマップ配列の番号)で保存してください.
2.mapの実装
-
マップ移動の仕組み
まずマップの名前をmap_name[map_num]の配列で与えています.
背景にする画像ファイルの名前をmap_name[map_num]でmap_numによって変えてマップ移動を実装しています.
なので新しいmapX.pngに移動したいときはまず
■field.h のMAXMAP の数字を1増やす
■field.cのmap_name_define()関数内でmap_name[X] = "mapX.png"と格納
という準備が必要です.
- 次にmapに実際に移動しましょう
mapinfo.txtの説明をします
マップのオブジェクト情報をテキストファイルから読み込んでいます.
このファイルは横40文字 x 縦30文字でひとつのマップの情報を表しています.20 x 15 のマップを主人公は一歩で16ピクセル進むのでマップサイズの倍です.
空行1つが1マップの区切りなので書くときはかならず40 x 30 空行 の構成をしてください.僕が作っていたmapinfo.txtを参考にしてください.
mapinfo.txtはそこにある文字でマップのオブジェクトを決定しています.例えば0行目の17文字目にある文字をキャラがy = 0,x = 17にあるイベントとして判定します.
文字ごとに何種類か処理が決めてあるので紹介します.
■0...歩ける キャラが歩けます.何もイベントは起こりません
■1...歩けない キャラが歩けません.1の書かれた座標に行くことができなくなります
■2...移動 この座標に入った時map_num++します.マップ移動に使います
■3...移動 2とは逆でmap_num--します.マップ移動に使います
■9...ランダムエンカウント この座標中で移動するたびエンカウントが判定されます.
■a ~ z...基本的にテキストを伴うイベントです特別なものとしてはh:回復 s:ショップ w,x,y,z:ボスや仲間などイベント後にキャラが消えたりするイベント
■A ~ Z...一回調べたら変化するイベントです.宝箱などに使います
などなどです.
このデータはobxy[map_num][y][x]の中に(ASCIICODE - 48)で与えられていますmap0のy=10,x = 5の座標はobxy[0][10][5]です.
なぜ48引いてるのかはスクリーンショットをみてください↓.
3.結局どうやるの
今回は実際に俺がmap1を作った時map0からの移動,オブジェクトを実装した時の話です
1.map1の画像をつくる.
2.どのマップから新マップに行きたいか決める(map0から行こう!)
3.map_nameなど初期化と定義
#define MAXMAP 3
map_name[1] = "map1.png";
など
4.新マップ前のマップで,新たな移動イベントオブジェクトを作る
map_numが0から1に変わるとmap0からmap1に行ける→map_num++をする'2'をmapinfo.txtの該当する位置を書き直す.
5.新マップのオブジェクトを決める.
キャラのいる座標をターミナルに表示させながらここは歩けない,ここには宝箱がある,など該当するオブジェクト,座標に対応するようにmapinfo.txtに文字を打っていきます.
(cb_key_pressの中にいろいろ座標などを表示するprintfがあるので適宜//を消して使ってください)
最終更新日:2017/07/28 15:39:44