[過去ログ]
DXライブラリ 総合スレッド その19 [無断転載禁止]©2ch.net (1002レス)
DXライブラリ 総合スレッド その19 [無断転載禁止]©2ch.net http://mevius.5ch.net/test/read.cgi/gamedev/1452005069/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
461: 名前は開発中のものです。 [] 2018/09/07(金) 06:49:13.67 ID:SP/YWN4v >>460 投げ出していません。 >>448さんのせっかくのソースがちょっと複雑で、、、 言葉でなにをしなければならないのか、アドバイスほしいです。 要は、 archive化したテキストファイルは改行コード\nが消えたバイナリファイル化してるから 普通にCSVを開くプログラムを書いていると archive後、正常に読み込まないってことですよね? ということは、バイナリ状態のCSVを読み込むプログラム文を書けってことですか? でも、それだとビジュアルスタジオ上のデバッグプレイじゃ バイナリ化してないcsvなんでエラーが起きますよね? だからすごく困っています。 どうすればいいのか http://mevius.5ch.net/test/read.cgi/gamedev/1452005069/461
463: 名前は開発中のものです。 [] 2018/09/07(金) 12:41:21.71 ID:SP/YWN4v >>462 えっと、自分の知識不足かもしれませんが 普通に数字と「,」だけが詰まったcsvファイルを用意していても バイナリ形式で読むプログラムを書いていれば バイナリ形式で読むってことですか? バイナリ形式で読むプログラムを書いた場合は 用意するファイルもバイナリ形式で保存されたファイルじゃないと ダメなのかなと思っているんですけど。 http://mevius.5ch.net/test/read.cgi/gamedev/1452005069/463
466: 名前は開発中のものです。 [] 2018/09/07(金) 14:40:43.77 ID:SP/YWN4v >>462 >パソコンで使うデータは全てバイナリデータと言えるので、 >csvだろうがDXアーカイブファイルだろうが全てバイナリ形式で読み込める その理論だとcsvや音声などの外部素材データをDXarchiveファイルにしたとしても、 archiveする前、つまりはビジュアルスタジオのプロジェクト上で ビルドして正常に機能してるプログラムそのままでも archive後も正常に機能するはずではないですか? もう少し具体的に言いますと>>442で説明しきれなかったんですが ifstream ifsを利用して、csvの中の数値を配列に入れ込むプログラムを 自分は書いてまして、そのプログラムで問題なく動いてるゲームがあるんですが、 それの完成後にreleaseビルドして、使用してるサウンドやcsvの素材は フォルダごとarchiveファイル化したんですよ(配布する場合は皆さんそうしますよね?。 そしてexeファイルを実行したところ、画像やサウンドは正常に読み込むんですが、 csvだけ正常に読み込んでくれないんです。 エラーになるというよりは、数値を正しく読み込んで無いようで、配列を利用した背景画像が バグります。 例えばそこで素材をarchiveファイル化せずに、素材が入ったフォルダをそのままで 利用すると画像やサウンドはもちろん、csvも正常に読み込み、ゲームも正常に動くんです。 なので、私は、こう思ったわけです。 「csvについては、archiveファイル化すること前提にしたプログラムを組まないと 正しく読めないのかな」と。 それで、「FileRead_open」を使わないとダメなのかなと。 archiveファイルのcsvを読み込む場合、FileRead_openを利用しろと言われたことがあるので。 でもあなたの話を聞いてたら、違うのかな、とか。。。 http://mevius.5ch.net/test/read.cgi/gamedev/1452005069/466
469: 名前は開発中のものです。 [] 2018/09/07(金) 15:15:27.11 ID:SP/YWN4v 呼び出し LoadData(int,int,string);//縦、横、csvファイルパス void LoadData(int y,int x,string s){ m_line = y; m_col = x; int line = 0;int count = 0;int sum = 0;int nokorinoketa=0; ifstream ifs(s); string buf[3000]; Map.resize(m_line);//resizeで行数を決める for(int i = 0; i<m_line; i++){Map[i].resize(m_col);}//resizeで各行の列数を決める while(ifs && getline(ifs,buf[line])){line++;} for(int line=0; line<y; line++){ for(int col=0; col<x; col++){ if(col < x-1){ sum = buf[line][count]-48; count++; while(isdigit(buf[line][count])){ sum = sum*10 + (buf[line][count])-48; count++;} Map[line][col] = sum;//Noが格納 count++;} if(col == x-1){//最後の数字 nokorinoketa = buf[line].size()-count; sum = buf[line][count] - 48; while(nokorinoketa > 1){ count++; sum = sum*10 + (buf[line][count])-48; nokorinoketa--;} Map[line][col] = sum;//Noが格納 }} count=0;}} http://mevius.5ch.net/test/read.cgi/gamedev/1452005069/469
470: 名前は開発中のものです。 [] 2018/09/07(金) 15:22:35.20 ID:SP/YWN4v 行数制限のせいで見づらいソースになってますが、ご了承ください。 処理内容は引数で配列の縦と横の値と、csvファイルのパスを受け取り、 まず、bufに全部入れてから、map配列に入れていく感じです。 呼び出しはLoadData(4,4,"h/m/data.csv");みたいな感じで書きます。 archiveファイル化しなければ、これで正常に動きます。 >>468 >基本的にDXライブラリが用意した専用の関数でしか読み込めない >画像やサウンドはDXライブラリの読み込み関数を使うから、 >何もせずともDXアーカイブファイルから読み込めるようになってるんだよ 納得です。それを聞きたかったんです。わかりやすいです。 >>というかなぜFileRead_openを拒むのかがわからない…… 拒んでいません。 一応、FileRead_openを>>469のプログラムに組み込んで動くようにしたんです。 問題なく、動きます。それはプロジェクト上で、ですが。 で、やっぱり外部ファイルをarchiveしたら、そのプログラムではうまくcsvを読み込まないんです。 FileRead_openを組み込んだのに、FileRead_openを組み込む前と同じバグの状況です。 http://mevius.5ch.net/test/read.cgi/gamedev/1452005069/470
472: 名前は開発中のものです。 [] 2018/09/07(金) 15:28:30.17 ID:SP/YWN4v あ、ちなみに>>469で利用しているMap配列の要素数は決めておらず、 vector<vector<int>>Map;と宣言しており、 第一、第二引数を受け取ってから要素数を決定させています。 http://mevius.5ch.net/test/read.cgi/gamedev/1452005069/472
473: 名前は開発中のものです。 [] 2018/09/07(金) 15:35:23.97 ID:SP/YWN4v >>471 ちゃんとFileRead_readで読むプログラムに修正しました。 具体的には、 ifstream ifs(s); while(ifs && getline(ifs,buf[line])){line++;} の箇所を int fh = FileRead_open(s.c_str()); while(fh && getline(fh,buf[line])){line++;} と変更するだけです(この場合は最後にFileRead_close(fh);してます。 これで問題なくないですか? 実際に、visualstudioのプロジェクト上でビルドすると 正常に動いています。 なのに、releaseビルドして、素材ファイルをarchiveした途端 csvは正常に読み込まないんです、、、、ほんと参ってます。。 なにが悪いんでしょう? http://mevius.5ch.net/test/read.cgi/gamedev/1452005069/473
474: 名前は開発中のものです。 [] 2018/09/07(金) 15:45:28.86 ID:SP/YWN4v なぜ、FileRead_openを使ってるのに、 FileRead_openを使ってないときのバグが出るんでしょうか。 でも、archive化しなければ、FileRead_openを使ってるそれでも正常に動くのです。 引数でcsvファイルのパスを受け取っているのが問題なんでしょうか? でも、利用するcsvファイルがいくつもあるので呼び出し命令の引数でファイルを選択してやらないと 困るんですよね。 もちろん、引数では数値を受け取り、switchで数値ごとにcsvを選択させてもいいですが、、 でも引数が問題では無いとも思うんですよ、、、、、。 なんでなのか、もう何日も悩んでいます。 もしよかったら頭から数字,数字,.....というdataが入ったcsvを FileRead_openで開いて、配列に入れていくという シンプルなソースを書いてみてくれませんか? DXライブラリのリファレンスにはcsvを使ったものが載ってないんですよ、、 なので、見せてほしいです。それを理解して応用させたいので。 お願いします、ほんと凄く困っていまして、、、 http://mevius.5ch.net/test/read.cgi/gamedev/1452005069/474
478: 名前は開発中のものです。 [] 2018/09/07(金) 22:11:13.47 ID:SP/YWN4v >>477 >getlineが使われてる様だが? int fh = FileRead_open(s.c_str()); えっと、まずこれをした時点で、 ファイル内の文字がfhに入ってると思ってるんで それをgetline(fh,buf[line]))するわけですから 問題ないかと思っているんですが、、私、なにか勘違いしてるのでしょうか、、 >t.open( "abc.csv");とかしたって読み込まないよ >そんなファイル無いんだから これはどーいうことですか?パスの表記の話でしたら ここでは割愛しただけですので実際は頭のフォルダとファイル名と入力してます。 t.open( "フォルダ名/abc.csv");な感じで。 、、そー言う問題ではなくて、archiveした場合 "abc.csv"というファイル名ではなくなるという話ですか?? >>476 まさか、これ、自分と同じことやってるプログラムですか? まさかこんなに短くできますよ、とかじゃないですよね? すごく興味深いのでちょっと処理をじっくり読ませて頂きます。 http://mevius.5ch.net/test/read.cgi/gamedev/1452005069/478
479: 名前は開発中のものです。 [] 2018/09/07(金) 22:15:41.50 ID:SP/YWN4v >>477 あ、今気づきました、 自分FileRead_read使ってないですね、、、 FileRead_openとFileRead_readと一緒くたに考えてソース作ってしまってました。 FileRead_openもDXライブラリの関数でそれで開いてるから DXライブラリArchiveしたファイルを開く問題はすでにクリアしたと。 http://mevius.5ch.net/test/read.cgi/gamedev/1452005069/479
481: 名前は開発中のものです。 [] 2018/09/07(金) 23:04:19.42 ID:SP/YWN4v >>476 すみません、今まで使ったことない関数や表現がありますのでよかったら教えて頂けませんでしょうか、、 自分は今成長したいんで、非常に関心がありますのでぜひともお願いします。 質問1、 if( isdigit( t_Char ) != 0 ) ここの意味は、isdigitで「t_Charの(頭が)空じゃ無いなら」の認識で正解ですか? 判定関数のisdigitを利用したことないもので、、 質問2、 もし1の私の認識が当たっているとすれば do{ t_Sum = ( t_Sum * 10 ) + ( t_Char - '0' ); t_Char = FileRead_getc( t_FileHandle ); }while( isdigit( t_Char ) != 0 ); ここの条件式は、t_Charの中の文字を読み進めながら 「空の領域になるまで」という理解になりますが、それで間違いないですか? 質問3、 t_Sum = ( t_Sum * 10 ) + ( t_Char - '0' ); すみません、ここのt_Char - '0'の理解ができてないんですがこれはなにを意味していますか? 推測では「,」の場所を判断するために記載していると思うのですが 「- '0'」は文字の0と文字の「,」は同義語ですか? t_Sum = ( t_Sum * 10 ) + ( t_Char - '0' ); はなにをしているのか 解説して頂けませんでしょうか、、 4、究極に理解が足りず困っているのが t_MapDataVec[ t_LoadNum / t_Width ][ t_LoadNum % t_Width ] = t_Sum; です。 本当に、これは初めて見た表現なんですが t_LoadNum / t_Widthでなぜその時の行数の添字が割り出せるのか、 t_LoadNum % t_Widthでなぜその時の要素数の添字が割り出せるのか お願いします、解説を、、、、すごく関心があります。そもそも、誰もが記載するであろう、 for(int line=0; line<y; line++){ for(int col=0; col<x; col++){ の式が無いプログラムで、二次元配列を回している様子が 自分の想像限度外で、もうなにがなんだか。 t_LoadNumの値だけをインクリメントしてるだけでなぜ二次元配列をすべて回すことが可能になるんですか? http://mevius.5ch.net/test/read.cgi/gamedev/1452005069/481
482: 名前は開発中のものです。 [] 2018/09/07(金) 23:12:10.86 ID:SP/YWN4v >>480 経験が浅いのは認めます、、 特に外部ファイルをいじるのと、archiveファイルについてはほんと理解度が低いです。 でも、ここでそう指摘されることも、 また私が質問させていただくことも自分が成長するひとつの事柄にはなりませんでしょうか、、 ただコピペしたいのでは無く、ソースを理解したくて>>481でも質問させて頂きました。 未熟者なのは認めます、疑問に思ったことをまず自分で検索で調べてみての質問です。 教えて頂けないでしょうか。。 正直、DXライブラリのアーカイブを使わなければ ゲームは動くのですが、DXライブラリのアーカイブでつまずいてしまっています。 releaseビルドしたあとにバグで遊べないのでほんと辛いのです。 http://mevius.5ch.net/test/read.cgi/gamedev/1452005069/482
483: 名前は開発中のものです。 [] 2018/09/07(金) 23:21:53.72 ID:SP/YWN4v >>480 C++を熟知せずとも、便利な関数のおかげで 手軽にゲームを作れる、それがDXライブラリの良さであり、 短所でもあるのだと思います。 画像を描画するのも関数ひとつです。それで表示できるので つまずきませんでした。 でもmap情報を外部ファイルにして読むことは、つまずています。 厳密にはアーカイブしなけば読むことは成功していますが、、 「お前は基本がなっていない」と言われたらそうなんですが でもチュートリアル的なブログや参考書でも、ひとつひとつ完全に理解しようとすると挫折するから 今の自分ではわからなくてもとりあえずそうなんだという精神で進めていきましょう的な 助言も多かったです。ぶつかるたびに覚えていけばいい的な、、違いますでしょうか? ファイルを扱う、バイナリ形式とかは、初めてです。なのでソースも見苦しいです。 でもそんな私でも>>476のプログラムはすごく魅力的だということがわかるんです。 学びたいんです、、簡単な解説でいいので、お願いできませんか? http://mevius.5ch.net/test/read.cgi/gamedev/1452005069/483
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.030s