現在、以下のURLを参考にしてRPGの作り方について勉強させていただいております。
http://dixq.net/forum/blog.php?u=114&sd=a&c=2&start=25
「ちょー簡単RPG講座8-7 ゲーム本編の組み込み。」の部分まで進み、
EASY_RPG03.zipの内容まで確認しました。
そこでPlutinumを利用して自分で作ったマップを読み込ませてみようと思い、
Plutinumの新規作成においてデータサイズを16bitに変更し、マップを作成しました。
データサイズを16bitに変更したので、
map.cpp において
#define MAPCG_WIDTH 16 から #define MAPCG_WIDTH 256 に変更しました。
ところが実行してみると、マップデータが正しく読み込まれません。
(マップチップが想定のものではなくバラバラになってしまいます。)
map.cpp内のmap_Draw(int px,int py,int frame)において、
pno = MapMngData.MapData[MAP_LAYER_UNDER][(MapMngData.fmfHeader.dwWidth*cy)+cx]
の番号がずれてしまっているようです。
どのようにすれば正しく読み込まれるのでしょうか。ご教授願います。
Platinumで作成したマップの読み込みについて
Re: Platinumで作成したマップの読み込みについて
この変更の根拠はなんですか?データサイズを16bitに変更したので、
map.cpp において
#define MAPCG_WIDTH 16 から #define MAPCG_WIDTH 256 に変更しました。
そもそもこの掲示板の人がみんなsoftyaさんの講座読んでるわけじゃないので、
その定数として利用していそうなdefineが結局何に使ってるのかわからないので、説明が必要だと思います。
Re: Platinumで作成したマップの読み込みについて
Plutinumでマップを作成する際、
8bitのときは、マップチップ画像(まとまったもの)を左上から32ピクセルずつ横に16個、縦に16個分割しています。
それぞれのマップチップには番号が振られており、左上から0,1,2,...,15一段降りて左から16,17,18,...と振られています。
この16X16に分割されたマップチップのパーツから選んで、全体のマップを作り上げていきます。
完成した物fmf形式で保存すると、ファイルの情報+各レイヤーのマップチップ番号が保存されます。
それをmap_LoadMapData関数で読み込みmap_Drawでマップチップ番号の計算と実際のマップを描き上げています。
以下は私の解釈ですが、
MapMngData.fmfHeader.dwWidthは実際のマップの横の長さであり、[(MapMngData.fmfHeader.dwWidth*cy)+cx]で左上から数えた番号を計算し、
pnoにそのマップの場所に書いてあるマップチップ番号を代入する。
そして、実際にマップチップ画像のどこから切り取ればよいのかを考えるために、そのマップチップ番号を
左から何番目、上から何番目にあるか計算してピクセル単位の左上の座標を求めている。
このように解釈しました。
ここで、Plutinumの新規作成で16bitに変更すると16X16が256X256となります。
よって、srcX,srcYの計算を行うMAP_CG_WIDTHを256に変更しなければならないと考えました。
マップを全部マップチップ番号12で埋め尽くしたファイルを読みこませると、12と0が交互に並んだマップ画像が出来上がります。
map_LoadMapDataでMapMngData.MapDataがどのように読み込まれているのかわからず、
fmfデータもバイナリデータで理解しづらく困っているという状況です。
わかりづらい文章だと思いますが、よろしくお願い致します。
8bitのときは、マップチップ画像(まとまったもの)を左上から32ピクセルずつ横に16個、縦に16個分割しています。
それぞれのマップチップには番号が振られており、左上から0,1,2,...,15一段降りて左から16,17,18,...と振られています。
この16X16に分割されたマップチップのパーツから選んで、全体のマップを作り上げていきます。
完成した物fmf形式で保存すると、ファイルの情報+各レイヤーのマップチップ番号が保存されます。
それをmap_LoadMapData関数で読み込みmap_Drawでマップチップ番号の計算と実際のマップを描き上げています。
以下は私の解釈ですが、
int pno = MapMngData.MapData[MAP_LAYER_CHIP][(MapMngData.fmfHeader.dwWidth*cy)+cx];
DWORD srcX = (pno % MAPCG_WIDTH) * chipW; //chipW=32ピクセル
DWORD srcY = (pno / MAPCG_WIDTH) * chipH; //chipH=32ピクセル
pnoにそのマップの場所に書いてあるマップチップ番号を代入する。
そして、実際にマップチップ画像のどこから切り取ればよいのかを考えるために、そのマップチップ番号を
左から何番目、上から何番目にあるか計算してピクセル単位の左上の座標を求めている。
このように解釈しました。
ここで、Plutinumの新規作成で16bitに変更すると16X16が256X256となります。
よって、srcX,srcYの計算を行うMAP_CG_WIDTHを256に変更しなければならないと考えました。
マップを全部マップチップ番号12で埋め尽くしたファイルを読みこませると、12と0が交互に並んだマップ画像が出来上がります。
map_LoadMapDataでMapMngData.MapDataがどのように読み込まれているのかわからず、
fmfデータもバイナリデータで理解しづらく困っているという状況です。
わかりづらい文章だと思いますが、よろしくお願い致します。