こんにちは。今回はマップファイルの読み込みと川の流れについて質問があります。
マップファイルを読み込むにはどうすればいいでしょうか?
マップエディタはPlatinumというものを使ってます。
DXライブラリの
FileRead_read という関数を使って読み込もうとしたのですが、画像は読み込めるのですがマップファイルは読み込めませんでした。どうすればいいでしょうか。
マップファイルの読み込み
Re:マップファイルの読み込み
>画像は読み込めるのですがマップファイルは読み込めませんでした
>どうすればいいでしょうか
FileRead_readで画像が読み込めるなら、マップファイルも読み込めるはずなのですが。
そうですね。
さすがにこれだけの情報では誰も何もわからないので、
とりあえず、何を以て読み込めなかったと判断したのか、と
具体的にどういうコードを書いて、読み込もうとしたのかを
提示してみてはどうでしょうか。
Re:マップファイルの読み込み
#include "DxLib.h"
#include <malloc.h>
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
void *Buffer ;
int FileSize, FileHandle, GrHandle ;
// DXライブラリの初期化
if( DxLib_Init() == -1 ) return -1 ;
// ファイルのサイズを得る
FileSize = FileRead_size( "sample.ppj" ) ;
// ファイルを格納するメモリ領域の確保
Buffer = malloc( FileSize ) ;
// ファイルを開く
FileHandle = FileRead_open( "sample.ppj" ) ;
// ファイルを丸ごとメモリに読み込む
FileRead_read( Buffer, FileSize, FileHandle ) ;
// ファイルを閉じる
FileRead_close( FileHandle ) ;
// グラフィックハンドルの作成
GrHandle = CreateGraphFromMem( Buffer, FileSize ) ;
// メモリの解放
free( Buffer ) ;
// 画面に描画
DrawGraph( 0, 0, GrHandle, TRUE ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
return 0 ;
}
これで実行したところ、真っ暗な画面でなにも起きませんでした。
ファイルを開く,サイズを得るをtown01_a.bmpにしたら、うまく表示されました・・・。
#include <malloc.h>
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
void *Buffer ;
int FileSize, FileHandle, GrHandle ;
// DXライブラリの初期化
if( DxLib_Init() == -1 ) return -1 ;
// ファイルのサイズを得る
FileSize = FileRead_size( "sample.ppj" ) ;
// ファイルを格納するメモリ領域の確保
Buffer = malloc( FileSize ) ;
// ファイルを開く
FileHandle = FileRead_open( "sample.ppj" ) ;
// ファイルを丸ごとメモリに読み込む
FileRead_read( Buffer, FileSize, FileHandle ) ;
// ファイルを閉じる
FileRead_close( FileHandle ) ;
// グラフィックハンドルの作成
GrHandle = CreateGraphFromMem( Buffer, FileSize ) ;
// メモリの解放
free( Buffer ) ;
// 画面に描画
DrawGraph( 0, 0, GrHandle, TRUE ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
return 0 ;
}
これで実行したところ、真っ暗な画面でなにも起きませんでした。
ファイルを開く,サイズを得るをtown01_a.bmpにしたら、うまく表示されました・・・。
Re:マップファイルの読み込み
ppjファイルは "Platinum Project File"ですよね?
これは画像ファイルではなく、Platinumのプロジェクトファイルなので、
Platinumアプリだけが読み書きできるデータファイルです。
なので、このデータからグラフィックハンドルを作成することは出来ないはずです。
逆に言えば、データとしては読み込めている可能性は高いです。
尚、ゲームなどで使用する場合は Platinumから bmpや csv、fmfに書き出して
使う必要があります。
(勿論、グラフィックハンドルに直接変換可能なのはこのうち bmpだけです)
fmf形式で読み込む方法については、サンプルが Platinumに同梱されていたと思うので
そちらを参考にしてみてください。
これは画像ファイルではなく、Platinumのプロジェクトファイルなので、
Platinumアプリだけが読み書きできるデータファイルです。
なので、このデータからグラフィックハンドルを作成することは出来ないはずです。
逆に言えば、データとしては読み込めている可能性は高いです。
尚、ゲームなどで使用する場合は Platinumから bmpや csv、fmfに書き出して
使う必要があります。
(勿論、グラフィックハンドルに直接変換可能なのはこのうち bmpだけです)
fmf形式で読み込む方法については、サンプルが Platinumに同梱されていたと思うので
そちらを参考にしてみてください。
Re:マップファイルの読み込み
返信ありがとうございます。
fmf形式で読み込む場合、マップのパーツを順々に変えていくことは出来ますか?
例えば
扉が閉まっているパーツがあり、扉のパーツの前で「Zキー」が押された場合扉が開くパーツに変更
川の流れを表現するパーツ 1 2 3 があり、川の流れを表現するパーツを 1→2→3→1→2→3→・・・ のようにループさせる。
のようにすることはできますか?
する方法は自分で考えて出来なかったら再び質問します・・・。
fmf形式で読み込む場合、マップのパーツを順々に変えていくことは出来ますか?
例えば
扉が閉まっているパーツがあり、扉のパーツの前で「Zキー」が押された場合扉が開くパーツに変更
川の流れを表現するパーツ 1 2 3 があり、川の流れを表現するパーツを 1→2→3→1→2→3→・・・ のようにループさせる。
のようにすることはできますか?
する方法は自分で考えて出来なかったら再び質問します・・・。
Re:マップファイルの読み込み
>マップのパーツを順々に変えていくことは出来ますか?
できますよ。
fmfデータの中には画像に関する情報やそれが何であるかの情報は一切含まれていません。
その場所が 0とか 4とか数字があるだけなので、その解釈は個々で行うことが出来ます。
つまり解釈する側でどうにでもできる、というわけです。
例えば扉に番号 100を割り当てたとして、マップ上に 100の指定があったら、
個々の扉を管理するプログラムがボタンに応じて開閉ステータスを切り替えたり、
ステータスに応じて開いている・閉じている扉の描画を行うようにするとか。
、或いは番号 100と 101にそれぞれ扉の開閉時の絵を割り当て、
100の時にZが押されたら 101に変更、101の時にZが押されたら 100に変更する、
というようにマップデータの番号を直接書き換えてもいいです。
まぁ扉に関しては後者の方がいいような気がしますね。
「最初から開いている扉、最初から閉じている扉」を表現するためには
それぞれに番号を割り振っておかないとエディタ上で区別が付かないですから。
川の流れの方も同様に、川は 150とか決めておいて、プログラムでマップを調べた時に
150の場所が出てきたのなら川だと判定して、適宜アニメーションさせれば
いいだけです。