ページ 11

素材を実行ファイルとは別のフォルダに保存したい

Posted: 2018年4月06日(金) 18:37
by 遊び人
お世話になっております。
DXライブラリにてゲーム等を作成する際、実行ファイル(exe)とゲームに使用する素材(画像、音楽等)が同じフォルダに入っていなければ実行ファイルが読み取ってくれません。
使用する素材が増えるとフォルダ内がごちゃごちゃして見にくくなってしまいますので、以下の画像のように分割したいのですが、可能でしょうか?

可能ならば方法を教えて下さると助かります。
開発環境はVS2017C++、Windows10です。

Re: 素材を実行ファイルとは別のフォルダに保存したい

Posted: 2018年4月06日(金) 23:39
by Rei
遊び人様のやろうとしていることを実現する方法は「絶対パス」を指定する方法と「相対パス」を指定する方法の二つがあります。
まず「絶対パス」の方法ですが、これはファイルのパスをすべて指定する方法です。たとえば表示したい画像の名前を「image.bmp」とし、これがC:\aaa\bbb\画像\image.bmpにあるとすると、

コード:

LoadGraph(C:\\aaa\\bbb\\画像\\image.bmp);
のようにすれば画像を読み込めます。(もちろんLoadGraph関数以外でも同じです)

※注意※
C言語では文字として「\」を扱う場合は上のコードのように「\\」と、必ず二つ入力する必要があります。ここはつい忘れがちなので注意してください。


しかし、いちいちすべてのパス(フルパス)を指定するのは面倒です。そこで遊び人様には「相対パス」の方法をお勧めします。
遊び人様が添付された画像のように「画像」フォルダがexeファイルと同じディレクトリにある場合はいちいちフルパスを指定しなくても

コード:

LoadGraph(画像\\image.bmp);
とすれば読み込めます。(より正確な話をするならこの方法が使えるのは「ファイルを読み込む時点でカレントディレクトリがexeファイルのあるディレクトリになっている場合」ですが、まだこの辺は気にしなくてもいいかと思います)
また、上級テクニックとして「画像」フォルダがexeファイルの一つ上のディレクトリにあるとき、例えば実行ファイル.exeはC:\aaa\bbb\実行ファイル.exeにあり、画像ファイルはC:\aaa\image.bmpにある場合などは

コード:

LoadGraph(..\\image.bmp);
のように、「..\\」をパスの先頭につけてやればいいです。また、二つ上の場合は

コード:

LoadGraph(..\\..\\image.bmp);
となるように、n個上のディレクトリにある時は「..\\を」n個つければOKです。
最後になりますが誤字脱字等あったらごめんなさい。

Re: 素材を実行ファイルとは別のフォルダに保存したい

Posted: 2018年4月07日(土) 00:21
by 遊び人
Rei様、ご返答ありがとうございました。
無事解決できました。
詳細な説明を書いてくださりとても助かりました。
これでぐちゃぐちゃになっているファイルの中からexeファイルを1分以上探し続けるという事態がなくなります。