[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 02/26 23:03 / Filesize : 285 KB / Number-of Response : 1033
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

DXライブラリ 総合スレッド その19



1 名前:名前は開発中のものです。 mailto:sage [2016/01/05(火) 23:44:29.77 ID:fkNSYSkc.net]
Cを習得した程度のスキルでも、ゲームのグラフィックを比較的容易に描画する事のできる、
「DXライブラリ」に関するスレッドです。
DXライブラリに関するテクニックなどの情報交換などを行う事で、
多くのDXライブラリユーザのスキルの向上に役立てたら幸いです。

【公式】
homepage2.nifty.com/natupaji/DxLib/

【関連スレ】
C/C++ゲーム製作総合スレッド Part7 [転載禁止](c)2ch.net
peace.2ch.net/test/read.cgi/gamedev/1420939171/
ゲームプログラムなら俺に聞け32(c)2ch.net
peace.2ch.net/test/read.cgi/tech/1441693570/

●DXライブラリではなくDirectXの質問ならこっちへ
【C++】 DirectX初心者質問スレ Part39 【C】 [転載禁止](c)2ch.net
peace.2ch.net/test/read.cgi/tech/1418438785/

401 名前:名前は開発中のものです。 mailto:sage [2018/04/22(日) 20:34:19.03 ID:w7fu0Q1x.net]
スーファミレベルの2Dゲームが作れれば満足な俺みたいなおっさんには
今のゲームが当たり前に実装する物理レンダや物理演算なんぞ要らんのです

402 名前:名前は開発中のものです。 mailto:sage [2018/04/23(月) 07:23:43.24 ID:zTmnRfht.net]
>>398
ゲーム制作ツールとライブラリの区別もつかないとか
先に病院で頭見てもらうべきなんじゃないの?

403 名前:名前は開発中のものです。 mailto:sage [2018/04/23(月) 15:53:58.50 ID:wUUOYYgP.net]
2D作るにしても物理演算はあった方が便利っしょ。box2dくらいは使えるようになった方がいい。

404 名前:名前は開発中のものです。 mailto:sage [2018/04/23(月) 16:30:22.21 ID:XokG/FK0.net]
俺は物理演算いらんけどなあ。自前で組んで調整した方がいい動きになると思う。

405 名前:名前は開発中のものです。 mailto:sage [2018/04/25(水) 18:53:22.42 ID:pNPtAbT4.net]
とある意見「Box2Dぐらいは使えるようになった方がいい(便利だし開発が楽だから)」
とあるマゾ「俺は楽したくない変態だから物理演算はいらない。他の人間もそうあるべき」
俺「開発の効率を上げるのを拒む人間って害悪だよなあ。真空管でパンチカードでも通してろよ・・・」

406 名前:名前は開発中のものです。 mailto:sage [2018/04/25(水) 21:42:09.32 ID:wCZSlXnR.net]
>>394
その人にとって不必要な機能が追加されることは開発の効率を上げることに繋がらないどころか
その人の必要な機能に対して公式のサポートの手が回りにくくなることから
その人にとっては開発の効率が下がることに繋がるってことを理解しようぜ

機能はあればあるだけいいってもんじゃない、必要な機能だけあるのが一番いい
必要な機能は人それぞれ

407 名前:名前は開発中のものです。 mailto:sage [2018/04/25(水) 23:48:47.29 ID:G5A97PEX.net]
>>394
同じCライブラリなんやから自分で組み込みゃいいでしょ。
何いってんの?

408 名前:名前は開発中のものです。 [2018/04/26(木) 06:43:12.80 ID:Q6Y0G65Q.net]
>>394
Box2D使えばええやん

409 名前:名前は開発中のものです。 mailto:sage [2018/04/26(木) 08:55:16.56 ID:8FkhnZEo.net]
自分で組んでbox2Dより洗練された高速演算のライブラリを書けるならまあいいけどさ
物理挙動は入れずに衝突判定だけ取ることも出来るんだよ。そこに使うだけでもめっちゃ楽。



410 名前:名前は開発中のものです。 mailto:sage [2018/04/26(木) 21:26:43.42 ID:Obi4vXUU.net]
衝突判定作るのってそんな大変かね
丸と四角と線分くらいで十分でしょ

411 名前:名前は開発中のものです。 mailto:sage [2018/04/26(木) 21:26:57.30 ID:O7SEtfFF.net]
>>395
うーん、とりあえず君はプログラム云々以前に日本語を勉強すべきかな
日本語も満足に操れない人間がプログラミングなんてちゃんちゃらおかしいよ

412 名前:名前は開発中のものです。 mailto:sage [2018/04/27(金) 19:02:34.86 ID:uyUfvLGU.net]
資本力がないとゲームエンジンが開発できなくなったんだよね、今の時代
物理演算、物理レンダ、2Dボーン、タイルマップエディタ、シェーダーのビジュアルスクリプト
こういう「早い」「安い」「うまい」が実現できなければユーザー離れが起きる

413 名前:名前は開発中のものです。 mailto:sage [2018/04/27(金) 20:17:38.78 ID:jXn/jYw6.net]
なんか、ここ、プログラムの「プ」の字も知らなさそうな奴らが多すぎないか?

414 名前:名前は開発中のものです。 mailto:sage [2018/04/27(金) 22:07:00.13 ID:uyUfvLGU.net]
ん、君はプログラマーか?
最近はタイルマップエディタとかビジュアルスクリプトが普通に使えるようになったから、
プログラマの負担が減らせるわけで、それはいいことなんじゃないの
(DXライブラリではよく知らんが、少なくともUnityやUE4では)

415 名前:名前は開発中のものです。 mailto:sage [2018/04/27(金) 23:36:34.96 ID:+EQaH9fl.net]
>>402
うるさい、バーカ

416 名前:名前は開発中のものです。 mailto:sage [2018/04/28(土) 08:48:27.83 ID:bZFWgAtf.net]
>>402
少なくともここ数レスで君が一番アホっぽいよ?w

417 名前:名前は開発中のものです。 mailto:sage [2018/04/28(土) 15:19:30.35 ID:o1LwlEpU.net]
無駄なものを無駄と判断して切り捨てる能力こそシステム開発において至高

キャラを動かしてるだけで気持ちイイという操作感を追求するのなら物理も有益

418 名前:名前は開発中のものです。 mailto:sage [2018/04/28(土) 17:36:54.96 ID:NvosXufr.net]
>>405
そんな、図星を突かれたショックと悔しさを前面に出したレスをしなくても……

419 名前:名前は開発中のものです。 mailto:sage [2018/04/29(日) 09:32:36.04 ID:Z/Nwj4DW.net]
>>407
効いちゃった?ごめんぬw



420 名前:名前は開発中のものです。 mailto:sage [2018/04/29(日) 13:55:41.62 ID:S7kv9d23.net]
>>406
方向キー入れた瞬間から等速直線運動スタートしてくれた方が気持ちよくない?
確かにキャラが歩きだす時は加速度運動するのが物理的に正しいけど咄嗟の回避とか間に合わなくてストレスあるね

421 名前:名前は開発中のものです。 [2018/04/29(日) 19:49:17.45 ID:SoZNbWO3.net]
>>408
誰かと勘違いしてるのかな? 謝らなくていいからキチガイは病院へ行こうねw

422 名前:名前は開発中のものです。 mailto:sage [2018/04/30(月) 08:39:38.91 ID:tt/t6/9o.net]
>>410
煽られてキレて顔赤くするくらいなら煽らなきゃいいのに
煽らなかったら煽られないんだよ?わかる?w

423 名前:名前は開発中のものです。 mailto:sage [2018/04/30(月) 09:46:00.03 ID:mwpHyMRP.net]
話が見えないんだけど、なんで>>402は突然このスレの住民に喧嘩売りだしたの?
誰かいじめた?

424 名前:名前は開発中のものです。 mailto:sage [2018/04/30(月) 13:48:06.47 ID:VZwEIDhP.net]
IQ200の私にもわからん難問だな。
言えることはそっとしとけと言うことだ。

425 名前:名前は開発中のものです。 mailto:sage [2018/04/30(月) 20:09:14.02 ID:KhVGgt2z.net]
このスレのレベルが低いのはわかりきってるのになぜわざわざ言葉に出すのか・・・・

426 名前:名前は開発中のものです。 [2018/05/07(月) 13:58:29.93 ID:Vfb9Bs9K.net]
確かにうんこ旨そうだよな

427 名前:名前は開発中のものです。 mailto:sage [2018/05/07(月) 19:41:54.85 ID:gUi75qwS.net]
実際は苦いけどな

428 名前:名前は開発中のものです。 mailto:sage [2018/05/08(火) 19:55:01.58 ID:zaHk58IC.net]
ググったら本当に苦いらしいな
印象論だと思ってたわ

429 名前:名前は開発中のものです。 mailto:sage [2018/06/08(金) 22:16:08.13 ID:uYJdfwFz.net]
Nintendo Switch対応だそうだ



430 名前:名前は開発中のものです。 mailto:sage [2018/06/09(土) 01:01:18.87 ID:fsH33aBO.net]
まあいつも通り、素人が使う分には関係ない感じ?

431 名前:名前は開発中のものです。 mailto:sage [2018/06/09(土) 21:18:20.35 ID:mBF3zINb.net]
プロでこれ使ってるの見たことない

432 名前:名前は開発中のものです。 mailto:sage [2018/06/09(土) 21:58:18.52 ID:fsH33aBO.net]
それは流石にアンテナ低くない?

433 名前:名前は開発中のものです。 mailto:sage [2018/06/10(日) 16:27:22.57 ID:qJZsL4jW.net]
>>421
さあ、クソの役にも立たないゴミみたいなマウンテンゴリラレスはやめて
人の役に立つレスをしようぜ

434 名前:名前は開発中のものです。 mailto:sage [2018/06/11(月) 13:23:15.85 ID:KAsMzLPf.net]
ライブラリ公開してくれよ。
車輪の再発明は辞めたい。
勉強にはなるけど。

435 名前:名前は開発中のものです。 mailto:sage [2018/06/13(水) 01:02:11.08 ID:zpWb0K6R.net]
最新のハードに対応するのはいいが、
グラフィックがもう10年前くらいの旧世代なのをなんとかしてほしいな
シェーダー使えないとか、HDR対応してないとか
形だけ対応して中身がついてきてない感じだ

436 名前:名前は開発中のものです。 mailto:sage [2018/06/16(土) 19:40:00.09 ID:8ewh1R16.net]
>>423
DXライブラリはソース公開されてるよ

437 名前:名前は開発中のものです。 mailto:sage [2018/06/17(日) 03:19:14.87 ID:z6C9dnYv.net]
ええ、公開されてますね(困惑。

438 名前:名前は開発中のものです。 mailto:sage [2018/06/30(土) 00:04:57.83 ID:QTwf7deE.net]
ジオメトリシェーダとハルシェーダが使えないのは別に文句ないけど
technique使用不可なのは地味にイライラする

439 名前:名前は開発中のものです。 mailto:sage [2018/07/04(水) 18:03:25.24 ID:GKLylxjM.net]
DXライブラリのシェーダーまわりはそれだけじゃないつーか
DirectX9とDirectX11でコーディング方法が違ったり、
Android版ではそもそもシェーダー使用不可能だったり、
2Dスプライトの表示にシェーダー使えなかったりして
あれもないこれもないって感じになっちゃうなぁ。まあそういうのがいらない人向けなんだろうけど



440 名前:名前は開発中のものです。 mailto:sage [2018/08/09(木) 02:58:08.73 ID:w7j+HefU.net]
VRoidのVRMファイルの読込に対応しようとしたらマテリアルが物理レンダのパラメータで
DXライブラリだとVRMファイル読込むのは難しそうだ
物理レンダ対応してくんないかな

441 名前:名前は開発中のものです。 [2018/08/11(土) 12:47:56.79 ID:RmGfKRPO.net]
DxLibのシェーダーのSamplerで、テクスチャごとに違うフィルタリングモードでSamplerを作りたいんだけど無理かな?
プログラム側でSetDrawModeで設定したフィルタリングモードになっちゃうんだけど

442 名前:名前は開発中のものです。 mailto:sage [2018/08/11(土) 13:37:54.92 ID:mdLblHI4.net]
未だにMMDとメタセコだから
VRMファイルはナウでヤングすぎる

443 名前:名前は開発中のものです。 mailto:sage [2018/08/11(土) 20:00:03.15 ID:0BvUQheC.net]
DXライブラリは時代遅れすぎてどうにもならない

444 名前:名前は開発中のものです。 mailto:sage [2018/08/11(土) 20:48:54.21 ID:V6BT8wZU.net]
すぎてってほどではないと思う、まだ

445 名前:名前は開発中のものです。 mailto:sage [2018/08/12(日) 00:15:54.84 ID:DLCHw2GI.net]
時代に遅れすぎた理由は、アセットストアがないせいだな
いまだにアセットがひとつもないのは、アセットおじさんも真っ青だわ

446 名前:名前は開発中のものです。 mailto:sage [2018/08/12(日) 09:49:59.00 ID:n2rCCHLV.net]
お前は何を言ってるんだ

447 名前:名前は開発中のものです。 mailto:sage [2018/08/15(水) 02:14:13.34 ID:I59D2OX6.net]
DXライブラリでようやく地面モデルと線分の当たり判定つけられた
そこに主人公モデルの位置を同じにした
まだモーションつけてないから
主人公が棒立ちのまま移動した
坂道登れるだけで感動した(小並感

448 名前:名前は開発中のものです。 mailto:sage [2018/08/20(月) 12:57:34.10 ID:HuW2CUtM.net]
日記ですか

449 名前:名前は開発中のものです。 mailto:sage [2018/08/26(日) 11:59:52.50 ID:Oz7phZC4.net]
日記の続きまたー?



450 名前:名前は開発中のものです。 mailto:sage [2018/08/29(水) 12:37:25.65 ID:8rKJxZI3.net]
DXライブラリって世間的にはゲームエンジン扱いなのな

451 名前:名前は開発中のものです。 mailto:sage [2018/08/30(木) 08:01:34.88 ID:w5Eoz0MG.net]
>>439
多分そこが一番誤解されやすいとこだよな。
基本はDirectXで自前で全部作りたいけれどめんどくさい設定周りだけはやって欲しい人向けのお助けラッパーだよね。
そこにDirectX以上の機能はいらないし。今の状態で十分。

452 名前:名前は開発中のものです。 mailto:sage [2018/08/30(木) 14:26:51.75 ID:83gEz2C2.net]
「各種ゲーム用エンジン紹介」みたいなところで触れられる分には「そんなもんか」って感じだけど
「ゲームエンジンを使っている」カテゴリの中にDXライブラリ製ゲームが含まれるとあれ?って思う
自分でも基準がよく分からない

453 名前:名前は開発中のものです。 [2018/08/31(金) 10:19:13.96 ID:MuDS6z7U.net]
教えてほしいんですが
int fp = FileRead_open("csvファイル");
この場合、fpにはcsvがそのまま入ってるという解釈でいいですか?
つまり、ifstream ifs(fp);が可能になるのかが知りたいです。

ifstream ifs(FileRead_open("csvファイル"));は無理ですか?

なんでこんな面倒なこと考えるかというと、
archive化したファイル内のcsvを読みたいんです。

454 名前:名前は開発中のものです。 [2018/08/31(金) 10:29:38.50 ID:MuDS6z7U.net]
>archive化したファイル内のcsvを読みたいんです

厳密に言いますと、
ifstream ifs();で読み込んで
string buf[要素数];
while(ifs && getline(ifs,buf[line])){
line++;
}
とbuf[]に一旦、そのままcsvの中身を格納したいんです。

普通なら、
ifstream ifs(csvファイル);で問題ないじゃないですか?
でも、そのcsvがarchiveしたファイルから読み込む場合
ifstream ifs(csvファイル);だと読み込みません。
そこでFileRead_openを使うわけですが、
自分はどうしても
ifstream ifs(csvファイル);
string buf[要素数];
while(ifs && getline(ifs,buf[line])){
line++;
}
の流れで利用したいんです。
なので、ifstream ifs(csvファイル);に来る前に
FileRead_openを使い終わらせ、
あとはFileRead関数系を使わなくて済む様にしたいんです。

、、伝わりますか?僕の言いたいこと。。

455 名前:名前は開発中のものです。 [2018/08/31(金) 23:18:37.63 ID:8gsP87Iw.net]
archive化したテキストファイルは改行コード\nが消えたバイナリファイル化してるから
最初にファイルサイズを計って1行ではなく全部をchar[filesize]に読み込むしかないんじゃない?

456 名前:名前は開発中のものです。 [2018/09/01(土) 06:52:39.05 ID:RWsTVHZH.net]
>>444
>

457 名前:archive化したテキストファイルは改行コード\nが消えたバイナリファイル化してるから

え、それ本当ですか?

>最初にファイルサイズを計って1行ではなく全部をchar[filesize]に読み込むしかないんじゃない?

すみません、もう少し具体的に教えてください!
[]
[ここ壊れてます]

458 名前:名前は開発中のものです。 mailto:sage [2018/09/01(土) 07:02:25.87 ID:BLfEX+5a.net]
>>445
ファイルサイズが1000なら
char t_data[ 1000 ] にファイルのデータを格納する

で、後は添え字で任意のデータにアクセスする

459 名前:名前は開発中のものです。 mailto:sage [2018/09/01(土) 11:30:13.35 ID:ghpuXsiR.net]
FileRead_scanfじゃいかんの?



460 名前:名前は開発中のものです。 [2018/09/01(土) 14:32:20.17 ID:PENKT9BN.net]
>>445
2chは長い行で書き込めないのよ

string all;
char* path = "./hello.csv";
int size = (int)FileRead_size( path ) ; // 1char = 1byte
char* buffer = new char[size];
int id = FileRead_open( path, false ) ;
FileRead_read( buffer, size, id) ;
all = buffer; // copy to string
delete[] buffer;
FileRead_close(id);

// allをcsvのrow(\r\n)とcol(,)でパースする。csv書式の不正チェックとか丁寧にやると長くなるので以下適当
string csv[ROW][COL];
string tmp = "";
int x = 0; int y = 0;
for(int i=0; i<all.length(); i++){
char c = all[i];
if(c == ',') {
csv[y][x] = tmp; tmp = ""; x++;
} else if (c == '\n') { // 本当は\r\nの2つで改行なんだけど
csv[y][x] = tmp; tmp = ""; x = 0; y++;
} else { tmp += c; }
}
csv[y][x] = tmp; // 最後の一個
文字列(string)から数値(intとか)に変えるときはatoiじゃなくてstrstreamだかを使うとよい

461 名前:名前は開発中のものです。 [2018/09/01(土) 14:44:21.63 ID:PENKT9BN.net]
追記
csvファイルの最後に無駄な改行がついてたりすると配列のサイズ超えたりしがちなので注意

462 名前:名前は開発中のものです。 [2018/09/01(土) 14:53:41.96 ID:PENKT9BN.net]
さらに追記
csvの最後ってヌル文字で終わってないだろうから自分で足したほうがいいかも

string all;
char* path = "./hello.csv";
int size = (int)FileRead_size( path ) ;

// '\0'が無い文字列char*をstringに渡すと長さ不定でまずい
char* buffer = new char[size+1];
buffer[size] = '\0';

int id = FileRead_open( path, false ) ;
FileRead_read( buffer, size, id) ;
all = buffer; // copy to string
delete[] buffer;
FileRead_close(id);

463 名前:名前は開発中のものです。 mailto:sage [2018/09/02(日) 02:13:46.38 ID:qrAMxSjg.net]
Cは文字列処理が弱いからCSVParserを書くのも一筋縄にはいかんよ

464 名前:名前は開発中のものです。 mailto:sage [2018/09/03(月) 04:26:51.22 ID:8cSGEO2Y.net]
そしてCSVの仕様を調べて、予想以上に面倒くさいことを知る

465 名前:名前は開発中のものです。 mailto:sage [2018/09/03(月) 23:58:20.90 ID:JgPc/ZW2.net]
「,」じゃなくてTABスペースで区切るとか
「'座標(x,y)'」みたいにシングル・ダブルクォーテーションで囲む「,」を含むセルだとか
CSVも奥が深い

466 名前:名前は開発中のものです。 mailto:sage [2018/09/04(火) 02:54:31.44 ID:jVVbpFTb.net]
ヘッダにコメントにセル内改行に空白セルに非固定列数に…
あれやこれや対応させると面倒なので、仕様はExcel出力版に決めうちとかしちゃう
それでいてExcel経由でもやり方によって微妙に違ったりするけど

467 名前:名前は開発中のものです。 mailto:sage [2018/09/04(火) 12:16:43.15 ID:qFImTgae.net]
Excel出力でも小数点の区切りがカンマな国とかあって地獄絵図なんだよなぁ

468 名前:名前は開発中のものです。 mailto:sage [2018/09/04(火) 12:18:12.23 ID:qFImTgae.net]
日本語がおかしかった
「小数点ががカンマ」ね

469 名前:名前は開発中のものです。 mailto:sage [2018/09/04(火) 12:18:39.57 ID:qFImTgae.net]
死にたい・・・



470 名前:名前は開発中のものです。 mailto:sage [2018/09/04(火) 18:21:03.16 ID:87Ucq8PA.net]
ワロタw
そもそも「小数点の区切りがカンマ」って別に変な日本語じゃないと思うけど?

471 名前:名前は開発中のものです。 mailto:sage [2018/09/05(水) 02:54:47.49 ID:6fPtkJ/i.net]
「(整数と)小数の区切り記号がカンマ」か
「小数点という区切り記号がカンマ」かってとこじゃない?
まあいずれにせよ通じる内容、普通に見落としちゃうレベルではある

472 名前:名前は開発中のものです。 [2018/09/05(水) 23:25:30.03 ID:jdPHLPpw.net]
もう>>442は投げ出しているだろうよ

473 名前:名前は開発中のものです。 [2018/09/07(金) 06:49:13.67 ID:SP/YWN4v.net]
>>460
投げ出していません。
>>448さんのせっかくのソースがちょっと複雑で、、、
言葉でなにをしなければならないのか、アドバイスほしいです。

要は、
archive化したテキストファイルは改行コード\nが消えたバイナリファイル化してるから
普通にCSVを開くプログラムを書いていると
archive後、正常に読み込まないってことですよね?
ということは、バイナリ状態のCSVを読み込むプログラム文を書けってことですか?
でも、それだとビジュアルスタジオ上のデバッグプレイじゃ
バイナリ化してないcsvなんでエラーが起きますよね?

だからすごく困っています。
どうすればいいのか

474 名前:名前は開発中のものです。 mailto:sage [2018/09/07(金) 12:19:35.09 ID:knV8JfdB.net]
>>461
>>でも、それだとビジュアルスタジオ上のデバッグプレイじゃ
>>バイナリ化してないcsvなんでエラーが起きますよね?
何を言っているのか分からん

デバッグモードだろうがバイナリ形式のファイルを読み込むプログラムを書けばバイナリ形式で読み込むし、
テキスト形式を読み込むプログラムを書けばテキスト形式で読み込むでしょ

475 名前:名前は開発中のものです。 [2018/09/07(金) 12:41:21.71 ID:SP/YWN4v.net]
>>462
えっと、自分の知識不足かもしれませんが
普通に数字と「,」だけが詰まったcsvファイルを用意していても
バイナリ形式で読むプログラムを書いていれば
バイナリ形式で読むってことですか?

バイナリ形式で読むプログラムを書いた場合は
用意するファイルもバイナリ形式で保存されたファイルじゃないと
ダメなのかなと思っているんですけど。

476 名前:名前は開発中のものです。 mailto:sage [2018/09/07(金) 13:34:50.10 ID:knV8JfdB.net]
>>463
そもそも上の方に書いてあった
「バイナリ形式は改行が削除される」っていうのが表現として適切じゃないな

改行コードを改行として認識するのがテキスト形式
改行コードをそのまま文字の羅列として認識するのがバイナリ形式

テキスト形式のファイルをバイナリ形式で読み込んだら
そのテキスト内の改行コードがそのまま文字列として読み込まれるだけ

477 名前:名前は開発中のものです。 mailto:sage [2018/09/07(金) 13:46:37.16 ID:2W2TZVJf.net]
1 複数データを一つにまとめたい(暗号化したい)
2 読み込みプログラム(csvパーサー?)は既存のものをそのまま流用したい
ってことなのかな……

>>444,>>446,>>448のキモは、DXアーカイブファイルを一本のchar配列に読み込む(バイナリデータとして扱う)という部分なので、
結局DXアーカイブもifstreamも関係なくて、char配列内のバイナリデータを自力で解析できるかという話になる

パソコンで使うデータは全てバイナリデータと言えるので、csvだろうが音声だろうがDXアーカイブファイルだろうが全てバイナリ形式で読み込める

478 名前:名前は開発中のものです。 [2018/09/07(金) 14:40:43.77 ID:SP/YWN4v.net]
>>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を利用しろと言われたことがあるので。
でもあなたの話を聞いてたら、違うのかな、とか。。。

479 名前:名前は開発中のものです。 mailto:sage [2018/09/07(金) 15:06:25.39 ID:knV8JfdB.net]
>>466
アーカイブは言わば「バイナリ形式」のファイルでしょ?

「テキスト形式のファイルを読み込むプログラム」でバイナリ形式のアーカイブを読み込もうとしてるからバグってるんじゃない?

123
456
789

上記のファイルがあったとして「1行読み込む」関数を使った場合
「123」「456」「789」って読み込むだろうけど
アーカイブ化(バイナリ形式)すると「1行読み込む」関数を使うと
「123\r\n456\r\n789」みたいに 一つの文字列として全部読み込むから数値が正常に読み取れてないと思うんだけど



480 名前:名前は開発中のものです。 mailto:sage [2018/09/07(金) 15:15:20.85 ID:2W2TZVJf.net]
まず、DXアーカイブファイルは全部のファイルを無理矢理合体&暗号化した完全独自形式のものなので、基本的にDXライブラリが用意した専用の関数でしか読み込めない

画像やサウンドはDXライブラリの読み込み関数を使うから、何もせずともDXアーカイブファイルから読み込めるようになってるんだよ
LoadGraph等には、内部的にFileRead_openが入ってるので、元のフォルダだろうとアーカイブだろうと読み込める

ただ、暗号化されてない場合に限り、小細工を弄すればバイナリファイルとして直接読める。(フォーマットを理解して自力でポインタ移動する必要がある) 上でみんなが説明してるのはこれ

これまでのやり取りを見る限り、バイナリファイル云々は今の君の知識で理解するのはたぶん無理なので、DXライブラリの関数使って地道にがんばったほうがいい
というかなぜFileRead_openを拒むのかがわからない……

481 名前:名前は開発中のものです。 [2018/09/07(金) 15:15:27.11 ID:SP/YWN4v.net]
呼び出し 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;}}

482 名前:名前は開発中のものです。 [2018/09/07(金) 15:22:35.20 ID:SP/YWN4v.net]
行数制限のせいで見づらいソースになってますが、ご了承ください。
処理内容は引数で配列の縦と横の値と、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を組み込む前と同じバグの状況です。

483 名前:名前は開発中のものです。 mailto:sage [2018/09/07(金) 15:27:55.83 ID:2W2TZVJf.net]
だからFileRead_readやFileRead_getsで読むんだぞ
もう一度リファレンスを熟読するんだ

484 名前:名前は開発中のものです。 [2018/09/07(金) 15:28:30.17 ID:SP/YWN4v.net]
あ、ちなみに>>469で利用しているMap配列の要素数は決めておらず、
vector<vector<int>>Map;と宣言しており、
第一、第二引数を受け取ってから要素数を決定させています。

485 名前:名前は開発中のものです。 [2018/09/07(金) 15:35:23.97 ID:SP/YWN4v.net]
>>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は正常に読み込まないんです、、、、ほんと参ってます。。

なにが悪いんでしょう?

486 名前:名前は開発中のものです。 [2018/09/07(金) 15:45:28.86 ID:SP/YWN4v.net]
なぜ、FileRead_openを使ってるのに、
FileRead_openを使ってないときのバグが出るんでしょうか。
でも、archive化しなければ、FileRead_openを使ってるそれでも正常に動くのです。

引数でcsvファイルのパスを受け取っているのが問題なんでしょうか?
でも、利用するcsvファイルがいくつもあるので呼び出し命令の引数でファイルを選択してやらないと
困るんですよね。
もちろん、引数では数値を受け取り、switchで数値ごとにcsvを選択させてもいいですが、、
でも引数が問題では無いとも思うんですよ、、、、、。

なんでなのか、もう何日も悩んでいます。

もしよかったら頭から数字,数字,.....というdataが入ったcsvを
FileRead_openで開いて、配列に入れていくという
シンプルなソースを書いてみてくれませんか?

DXライブラリのリファレンスにはcsvを使ったものが載ってないんですよ、、
なので、見せてほしいです。それを理解して応用させたいので。
お願いします、ほんと凄く困っていまして、、、

487 名前:名前は開発中のものです。 mailto:sage [2018/09/07(金) 15:48:35.98 ID:6e9JnvLB.net]
それ逆じゃないのか?

488 名前:名前は開発中のものです。 mailto:sage [2018/09/07(金) 17:09:17.90 ID:stA8I9vh.net]
良く分からんけど、こんな感じの事がしたいの?
void LoadData( int t_Width, int t_Height, std::string t_FileName )
{
int t_FileHandle = FileRead_open( t_FileName.c_str() );
int t_FileSize = FileRead_size( t_FileName.c_str() );
std::vector< std::vector< int > > t_MapDataVec;
int t_LoadNum = 0;
char t_Char;

//マップの配列を確保
t_MapDataVec.resize( t_Height );
for( int i = 0; i < t_Height; i++ )
{
t_MapDataVec[ i ].resize( t_Width );
}

//正常に1文字を読み込める間、繰り返す
while( ( t_Char = FileRead_getc( t_FileHandle ) ) != -1 ){
if( isdigit( t_Char ) != 0 ){
int t_Sum = 0;
do{
t_Sum = ( t_Sum * 10 ) + ( t_Char - '0' );
t_Char = FileRead_getc( t_FileHandle );
}while( isdigit( t_Char ) != 0 );

t_MapDataVec[ t_LoadNum / t_Width ][ t_LoadNum % t_Width ] = t_Sum;
++t_LoadNum;
}
}
FileRead_close( t_FileHandle );
}

489 名前:名前は開発中のものです。 mailto:sage [2018/09/07(金) 20:11:51.17 ID:stA8I9vh.net]
>>473
int fh = FileRead_open(s.c_str());
while(fh && getline(fh,buf[line])){line++;}

ん?
FileRead_readとかのDXライブラリ関数じゃなくて
getlineが使われてる様だが?

例えばabc.csvを他のファイルと纏めて
Archive.dxaっていうアーカイブにした場合、

std::ifstream t;
t.open( "abc.csv");とかしたって読み込まないよ
そんなファイル無いんだから

DXライブラリ用のArchive作ってるのに
それを通常の入出力関数で読み出そうとしてるのがバグの原因だよ



490 名前:名前は開発中のものです。 [2018/09/07(金) 22:11:13.47 ID:SP/YWN4v.net]
>>477
>getlineが使われてる様だが?

int fh = FileRead_open(s.c_str());
えっと、まずこれをした時点で、
ファイル内の文字がfh

491 名前:に入ってると思ってるんで
それをgetline(fh,buf[line]))するわけですから
問題ないかと思っているんですが、、私、なにか勘違いしてるのでしょうか、、

>t.open( "abc.csv");とかしたって読み込まないよ
>そんなファイル無いんだから

これはどーいうことですか?パスの表記の話でしたら
ここでは割愛しただけですので実際は頭のフォルダとファイル名と入力してます。
t.open( "フォルダ名/abc.csv");な感じで。
、、そー言う問題ではなくて、archiveした場合
"abc.csv"というファイル名ではなくなるという話ですか??


>>476
まさか、これ、自分と同じことやってるプログラムですか?
まさかこんなに短くできますよ、とかじゃないですよね?
すごく興味深いのでちょっと処理をじっくり読ませて頂きます。
[]
[ここ壊れてます]

492 名前:名前は開発中のものです。 [2018/09/07(金) 22:15:41.50 ID:SP/YWN4v.net]
>>477
あ、今気づきました、
自分FileRead_read使ってないですね、、、
FileRead_openとFileRead_readと一緒くたに考えてソース作ってしまってました。
FileRead_openもDXライブラリの関数でそれで開いてるから

DXライブラリArchiveしたファイルを開く問題はすでにクリアしたと。

493 名前:名前は開発中のものです。 mailto:sage [2018/09/07(金) 22:26:57.73 ID:2W2TZVJf.net]
薄々気づいていたけど、あまりにも基本的なことがわかってなさすぎる
勘違いですらなくて、全くわかってない

int fn はただのハンドル(識別番号)だし、ファイルオープンと読み込みは違うし、アーカイブファイルについても全くわかってないし、その知識でバイナリファイルを理解できるわけがない

あんま厳しいこと言いたくないけど、拾ってきたコピペを組み合わせて作ろうと思わず
c++の基本から勉強して、一文字ずつ自分で打ち込んだほうがいい

494 名前:名前は開発中のものです。 [2018/09/07(金) 23:04:19.42 ID:SP/YWN4v.net]
>>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の値だけをインクリメントしてるだけでなぜ二次元配列をすべて回すことが可能になるんですか?

495 名前:名前は開発中のものです。 [2018/09/07(金) 23:12:10.86 ID:SP/YWN4v.net]
>>480
経験が浅いのは認めます、、
特に外部ファイルをいじるのと、archiveファイルについてはほんと理解度が低いです。
でも、ここでそう指摘されることも、
また私が質問させていただくことも自分が成長するひとつの事柄にはなりませんでしょうか、、
ただコピペしたいのでは無く、ソースを理解したくて>>481でも質問させて頂きました。

未熟者なのは認めます、疑問に思ったことをまず自分で検索で調べてみての質問です。
教えて頂けないでしょうか。。
正直、DXライブラリのアーカイブを使わなければ
ゲームは動くのですが、DXライブラリのアーカイブでつまずいてしまっています。
releaseビルドしたあとにバグ

496 名前:ナ遊べないのでほんと辛いのです。 []
[ここ壊れてます]

497 名前:名前は開発中のものです。 [2018/09/07(金) 23:21:53.72 ID:SP/YWN4v.net]
>>480
C++を熟知せずとも、便利な関数のおかげで
手軽にゲームを作れる、それがDXライブラリの良さであり、
短所でもあるのだと思います。

画像を描画するのも関数ひとつです。それで表示できるので
つまずきませんでした。
でもmap情報を外部ファイルにして読むことは、つまずています。
厳密にはアーカイブしなけば読むことは成功していますが、、

「お前は基本がなっていない」と言われたらそうなんですが
でもチュートリアル的なブログや参考書でも、ひとつひとつ完全に理解しようとすると挫折するから
今の自分ではわからなくてもとりあえずそうなんだという精神で進めていきましょう的な
助言も多かったです。ぶつかるたびに覚えていけばいい的な、、違いますでしょうか?
ファイルを扱う、バイナリ形式とかは、初めてです。なのでソースも見苦しいです。
でもそんな私でも>>476のプログラムはすごく魅力的だということがわかるんです。
学びたいんです、、簡単な解説でいいので、お願いできませんか?

498 名前:名前は開発中のものです。 mailto:sage [2018/09/07(金) 23:54:23.29 ID:VUsIud2k.net]
長い。

【1・2】isdigitが分からないならisdigitについて調べれば?
【3】教科書の最初に載ってるはずだが「'0'」は0という文字そのものを表す
【4】適当に数字を入れて計算してみれば?

499 名前:名前は開発中のものです。 [2018/09/08(土) 00:37:34.88 ID:DgEMMqli.net]
>>484
【4】適当に数字を入れて計算してみれば?

これ、今やってるんですが、目から鱗です、、、
すごい、添字の回し方、こんなシンプルな表現方法がったなんで
すごい!



500 名前:名前は開発中のものです。 [2018/09/08(土) 00:38:42.99 ID:DgEMMqli.net]
stA8I9vhさん、天才だ、、参考書やブログで見たことないですよ、
こんな回し方してる人。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<285KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef