トップページ > 過去ログ > 記事閲覧
ファイルの読み込み時
名前:ナッサム 日時: 2007/07/10 16:50

はじめまして、先週からゲームを作成し始めた初心者です。 画像を読み込む際のエラーなのですが、解決方法が解りません。 多くのパターンを使いたいのでif や switch ではコードが長くなるのでさけたいのですが 何か良い方法はないでしょうか? 下記が現在のソースです ----- ここから ----- enum{ MOUNTAIN, RIVER, SEA, } ; char *bg_img[] = { "bg_01", "bg_02", "bg_03", } ; int img ; int bg_num ; bg_num = MOUNTAIN ; img = LoadGraph( bg_img[bg_num] + ".bmp" ) ; ----- ここまで ----- よろしく御願い致します

Page: 1 |

Re: ファイルの読み込み時 ( No.1 )
名前:犬福 日時:2007/07/10 17:33

Cでは文字列は数値のように「+」では簡単に結合できません。 そのやり方だと文字列を指すポインタ同士の足し算になってしまうのでエラーとなります。 じゃあどうするかというと色々やり方はありますけど、 以下のようなやり方なんてどうでしょうか? enum{ MOUNTAIN, RIVER, SEA }; char *bg_img[] = { "bg_01", "bg_02", "bg_03", }; int img; int bg_num = MOUNTAIN; char file_name[256]; sprintf(file_name, bg_img[bg_num], ".bmp"); img = LoadGraph(file_name); まず文字列を格納するバッファを用意してから、 sprintfでバッファにファイル名と拡張子をコピーしてます。
Re: ファイルの読み込み時 ( No.2 )
名前:ナッサム 日時:2007/07/10 19:46

なるほど、sprintfをすっかり忘れていました。 "bg_01.bmp" "bg_02.bmp" とすればいい所ですが、ファイル名を使いまわしたかったもので。 これで解決できました。ありがとうございました。
Re: ファイルの読み込み時 ( No.3 )
名前: 日時:2007/07/10 23:53

蛇足ですが、文字列の結合にはstrcatなどもありますよ。
Re: ファイルの読み込み時 ( No.4 )
名前:優柔不断 日時:2007/07/11 07:53

すいません、ケチつけるようで、この場合、sprintf(filename,"%s%s",bg_ing[bghnum],".bmp"); としたほうが、確実です。
Re: ファイルの読み込み時 ( No.5 )
名前:犬福 日時:2007/07/11 14:49

>>優柔不断 確実ってよりそっちが正解です テスト用に書いたコードはそうしてたのに・・orz ナッサムさんすみませんm(_ _)m
Re: ファイルの読み込み時 ( No.6 )
名前:優柔不断 日時:2007/07/27 14:23

すいませんでした、前のプログラムソースでは、 第3引数は bg_ing[bg_num] の間違いでした。 迷惑かけて本当に申し訳ありませんでした。 また、これは少し余計ですが、sprintf()関数を、 使うのでしたら、以下のような方法もあります。↓ enum{ MOUNTAIN, RIVER, SEA }; int img; int bg_num = MOUNTAIN; char file_name[256]; sprintf(file_name,"bg_%02d%s",bg_num,".bmp"); img = LoadGraph(file_name); この方法は、sprintf()関数でしか使えませんので、 ご注意ください。

Page: 1 |