#include "DxLib.h"
#include <math.h>
~省略~
GTable[0] = LoadGraph( "画像/いぬ.png" ) ;
GTable[1] = LoadGraph( "画像/うさぎ.png" ) ;
GTable[2] = LoadGraph( "画像/うし.png" ) ;
GTable[3] = LoadGraph( "画像/おとこのこ.png" ) ;
GTable[4] = LoadGraph( "画像/おんなのこ.png" ) ;
GTable[5] = LoadGraph( "画像/かえる.png" ) ;
GTable[6] = LoadGraph( "画像/かに.png" ) ;
GTable[7] = LoadGraph( "画像/きりん.png" ) ;
GTable[8] = LoadGraph( "画像/さかな.png" ) ;
GTable[9] = LoadGraph( "画像/ちょうちょ.png" ) ;
GTable[10] = LoadGraph( "画像/ねこ.png" ) ;
GTable[11] = LoadGraph( "画像/ねずみ.png" ) ;
GTable[12] = LoadGraph( "画像/はち.png" ) ;
GTable[13] = LoadGraph( "画像/はと.png" ) ;
GTable[14] = LoadGraph( "画像/ぶた.png" ) ;
GTable[15] = LoadGraph( "画像/みのむし.png" ) ;
GTable[16] = LoadGraph( "画像/らいおん.png" ) ;
~省略~
画像ファイルの読み込みについて
画像ファイルの読み込みについて
画像ファイルの読み込みをLoadGraph関数を使って、ひとつずつ行っていますが、ファイルの数が増えてくるといちいち入力するのが面倒くさくて、大変です。「このフォルダ内のpngファイルを読み込む」といった具合に自動化できませんか?
コードはこんな感じです。いちいちテーブルの添え字を指定して入力するのが面倒くさいので何か方法はありませんか?
Re: 画像ファイルの読み込みについて
画像のサイズがわからないので一枚にまとめる方法はなしと考えて進めます。aaaaaa さんが書きました:画像ファイルの読み込みをLoadGraph関数を使って、ひとつずつ行っていますが、ファイルの数が増えてくるといちいち入力するのが面倒くさくて、大変です。「このフォルダ内のpngファイルを読み込む」といった具合に自動化できませんか?コードはこんな感じです。いちいちテーブルの添え字を指定して入力するのが面倒くさいので何か方法はありませんか?#include "DxLib.h" #include <math.h> ~省略~ GTable[0] = LoadGraph( "画像/いぬ.png" ) ; GTable[1] = LoadGraph( "画像/うさぎ.png" ) ; GTable[2] = LoadGraph( "画像/うし.png" ) ; GTable[3] = LoadGraph( "画像/おとこのこ.png" ) ; GTable[4] = LoadGraph( "画像/おんなのこ.png" ) ; GTable[5] = LoadGraph( "画像/かえる.png" ) ; GTable[6] = LoadGraph( "画像/かに.png" ) ; GTable[7] = LoadGraph( "画像/きりん.png" ) ; GTable[8] = LoadGraph( "画像/さかな.png" ) ; GTable[9] = LoadGraph( "画像/ちょうちょ.png" ) ; GTable[10] = LoadGraph( "画像/ねこ.png" ) ; GTable[11] = LoadGraph( "画像/ねずみ.png" ) ; GTable[12] = LoadGraph( "画像/はち.png" ) ; GTable[13] = LoadGraph( "画像/はと.png" ) ; GTable[14] = LoadGraph( "画像/ぶた.png" ) ; GTable[15] = LoadGraph( "画像/みのむし.png" ) ; GTable[16] = LoadGraph( "画像/らいおん.png" ) ; ~省略~
比較的簡単な手法として
~.pngのところの~を数字に置き換えてsprintfなどで変えてしまう手があります。
(charの部分はstd::stringが使えるならストリングで)
char file_name[256];
for(int i=0;i<16;i++){ //画像ファイルの個数分
sprintf_s(file_name,"%d.png",i);
GTable[i] = LoadGraph( file_name ) ;
}
もう一つの手法として、ディレクトリを走査して内部にあるpngファイルを取得する方法があります。
こちらは面倒臭いので一度作ったらテンプレート化してしまうことをお薦めします。
またディレクトリ走査は久しぶり過ぎてうろ覚えですので流れだけ。
まず、API関数を使うのでご了承を。
GetCurrentDirectoryで現在のカレントディレクトリを取得し保存。
SetCurrentDirectoryでディレクトリを設定。
FindFirstFileでワイルドカードを指定。つまりこの場合"*.png"で呼び出す。
画像をロード且つ、FindNextFileでERROR_NO_MORE_FILESになるまで続ける。
終わったらFindCloseで閉じる。
カレントディレクトリを元に戻す。
こんな流れだとおもいます。
言っていることが一切わからない場合前述のsprintfをお薦めします。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 画像ファイルの読み込みについて
FindNextFileなどのディレクトリ操作法はDXライブラリのアーカイブだと特殊な処理が必要なのでアーカイブ化する予定ならオススメできません。
FindNextFileでディレクトリ・リストを作成するツールを別に作って結果をファイル出力。そのファイルの情報を元に読み込むようにするのはどうでしょうか?
FindNextFileでディレクトリ・リストを作成するツールを別に作って結果をファイル出力。そのファイルの情報を元に読み込むようにするのはどうでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 画像ファイルの読み込みについて
こんなふうにすればファイル名(の文字列)をいじるだけですが。
ディレクトリを走査すると順番を把握するのが面倒になるのでは?
static const char *filename[] = {
"画像/いぬ.png",
"画像/うさぎ.png",
"画像/うし.png",
"画像/おとこのこ.png",
"画像/おんなのこ.png",
"画像/かえる.png",
"画像/かに.png",
"画像/きりん.png",
"画像/さかな.png",
"画像/ちょうちょ.png",
"画像/ねこ.png",
"画像/ねずみ.png",
"画像/はち.png",
"画像/はと.png",
"画像/ぶた.png",
"画像/みのむし.png",
"画像/らいおん.png",
};
int GTable[sizeof(filename)/sizeof(filename[0])];
int i;
for (i=0; i<sizeof(GTable)/sizeof(GTable[0]); i++) {
GTable[i] = LoadGraph(filename[i]);
}
- Dixq (管理人)
- 管理人
- 記事: 1662
- 登録日時: 15年前
- 住所: 北海道札幌市
- 連絡を取る:
Re: 画像ファイルの読み込みについて
うちのサイトで紹介してるAerobeatというゲームは、自分で曲を追加できるので、FindFirstFileを使ってディレクトリ内の情報を取ってきています。
http://dixq.net/Aerobeat/
しかしこれは、素材の順番がどうでもいい場合に限ります。
どうでもよくない場合は、FindFirstFileを使って一括で読み込むと参照するのが大変です。
ISLeさんが書かれているような方法にするか、HashMapみたいなもので、パスと固有値とハンドルを対応付けて管理すると楽かもしれません。
http://dixq.net/Aerobeat/
しかしこれは、素材の順番がどうでもいい場合に限ります。
どうでもよくない場合は、FindFirstFileを使って一括で読み込むと参照するのが大変です。
ISLeさんが書かれているような方法にするか、HashMapみたいなもので、パスと固有値とハンドルを対応付けて管理すると楽かもしれません。
Re: 画像ファイルの読み込みについて
ああっ、そうでした!すみません。ISLe さんが書きました:ディレクトリを走査すると順番を把握するのが面倒になるのでは?
ISleさんのコードの方が遥にいいですね。オーバーフロー対策的にも。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 画像ファイルの読み込みについて
>どうでもよくない場合は、FindFirstFileを使って一括で読み込むと参照するのが大変です。softya(ソフト屋) さんが書きました:FindNextFileなどのディレクトリ操作法はDXライブラリのアーカイブだと特殊な処理が必要なのでアーカイブ化する予定ならオススメできません。
FindNextFileでディレクトリ・リストを作成するツールを別に作って結果をファイル出力。そのファイルの情報を元に読み込むようにするのはどうでしょうか?
そういうのは簡易なデータベースのようなもので出てくる順番を管理するって手がありますね。
増えた分には新しい番号が割り当てられる & 前からあるのは同じ番号のまま。
問題はこの読み込まれたテーブルが番号でしか管理できない事でしょうか。
つまりマジックナンバーでしかアクセス出来ないって方が問題だと思います。
面倒でしょうが、ISLe さんのやつに更にテーブル参照用のenumを追加するとかも手ですし、私の案で自動的にenumを定義したhファイルを作成するって手もあります(※1)。
※1 enumを自動定義するためにはファイル名から作るので英字であることが望ましいです。環境次第で日本語でも出来ないことはないですが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- Dixq (管理人)
- 管理人
- 記事: 1662
- 登録日時: 15年前
- 住所: 北海道札幌市
- 連絡を取る:
Re: 画像ファイルの読み込みについて
うまくいかなかったとのことですが、どううまくいかなかったのですか?
皆さんが書いてくださった回答に対して全くレスがありませんが
ほかの掲示板に頼る前に分からないことを解決していかないと、同じことの繰り返しではないでしょうか。
皆さんが書いてくださった回答に対して全くレスがありませんが
ほかの掲示板に頼る前に分からないことを解決していかないと、同じことの繰り返しではないでしょうか。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 画像ファイルの読み込みについて
続きはこちらにあります。
「画像ファイル自動読み込み」
http://hpcgi2.nifty.com/natupaji/bbs/pa ... ew&no=2834
まぁ、赤鬼さんの提案と同じようにすると言う方向になっているわけですが、こっちで言っていた問題は残ったままです。
色々提案されてわけが分からなくなったって所でしょうか。
「画像ファイル自動読み込み」
http://hpcgi2.nifty.com/natupaji/bbs/pa ... ew&no=2834
まぁ、赤鬼さんの提案と同じようにすると言う方向になっているわけですが、こっちで言っていた問題は残ったままです。
色々提案されてわけが分からなくなったって所でしょうか。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- Dixq (管理人)
- 管理人
- 記事: 1662
- 登録日時: 15年前
- 住所: 北海道札幌市
- 連絡を取る:
Re: 画像ファイルの読み込みについて
> softyaさん
なるほど、DXライブラリ本家の方を拝見しました。
・・色々返信を書いていましたが、やめました。
aaaaaaさんがフォーラムルールを理解して頂ける方なら続きを書いていただけるでしょう。
softyaさん、対応ありがとうございます。
なるほど、DXライブラリ本家の方を拝見しました。
・・色々返信を書いていましたが、やめました。
aaaaaaさんがフォーラムルールを理解して頂ける方なら続きを書いていただけるでしょう。
softyaさん、対応ありがとうございます。