FileRead_openで応答なしになってしまいます

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
axis

FileRead_openで応答なしになってしまいます

#1

投稿記事 by axis » 5年前

プログラミングははじめたばかりで、
龍神録プログラミングの館を参考にさせてもらいながらゲームを作っています
抜けている部分があるかもしれませんがお許し下さい

VS2013/C++/dxlib

ステージのデータの入ったcsvファイル"rc/data/stage/test.csv"
を開こうとすると何故か応答なしになってしまいます。

Scene_playクラスがBossクラスをメンバに持っています
Scene_playのコンストラクタで試しにファイルを開いてみると正常に開けます。
ですぐに閉じてBossをnewします。
しかしBossのコンストラクタで開こうとするとFileRead_open();で応答なしになってしまいます。
エラーのNULLも返されません。

この問題はVS2013の「デバッグ無しで開始」の時のみ起こり、
「デバッグ開始」では起こらず、全て正常に動きます
自前でログファイル.txtに出力してみてもBossのロードでブッツリです

4970864 --GLog::ログ初期化完了
0 --4970865
0 --Variable::Dx_Lib初期化終了//DxLib_Init();
1529 --Variable::メインループに入ります
1529 -----メインループ始まり---
1530 -----シーン切り替え---
1530 --シーン::プレイ
1530 --Play::初期化開始
1530 --Play::ステージファイルテスト
1530 --rc/data/stage/test.csv-OPEN
1531 --rc/data/stage/test.csv-CLOSE
1531 --Play::ステージファイルテスト成功
1531 --Board::初期化開始
1560 --Board::初期化終了
1561 --Player::初期化開始
1564 -- Shot_Ply::初期化開始
1566 -- Shot_Ply::初期化終了
1566 --Player::初期化終了
1566 --Boss:初期化開始
1580 -- Shot_Boss::初期化開始
1580 -- Shot_Boss::初期化終了
1580 --Boss::ステージファイルロード
1580 --rc/data/stage/test.csv-OPEN//この後にint fp=FileRead_open("rc/data/stage/test.csv")で応答なし

わかりづらいかも知れませんがご享受ください。
自分が簡単なミスをしているのかもしれませんん、よろしくお願いしますm(_ _)m

アバター
へにっくす
記事: 630
登録日時: 8年前
住所: 東京都

Re: FileRead_openで応答なしになってしまいます

#2

投稿記事 by へにっくす » 5年前

axis さんが書きました:Scene_playクラスがBossクラスをメンバに持っています
Scene_playのコンストラクタで試しにファイルを開いてみると正常に開けます。
ですぐに閉じてBossをnewします。
しかしBossのコンストラクタで開こうとするとFileRead_open();で応答なしになってしまいます。
エラーのNULLも返されません。
Scene_playのコンストラクタならokで、
Bossのコンストラクタで駄目ならば、まず疑うのはBossの実装ですね。

というわけで、その部分のソースを掲示してください。

一番いいのは、プロジェクトをzipに圧縮して
ダウンロードできるようにしてリンクを張ることです。
そうすれば、より適切な助言をもらえると思いますよ。

追記:ユーザーさんなのであればログインして、ここの掲示板に直接アップしましょう。
(ただしサイズ制限があるので注意)
written by へにっくす

アバター
axis
記事: 10
登録日時: 5年前
住所: 山梨
連絡を取る:

Re: FileRead_openで応答なしになってしまいます

#3

投稿記事 by axis » 5年前

回答有難うございます!
確かにそうですね・・・
rcファイルは二次配布禁止のものが多いので読みづらいコードだけですが
https://www.dropbox.com/s/w9mw2w8n6yjcaaz/code.zip?dl=0
お願い致します
ビギナーです。

アバター
axis
記事: 10
登録日時: 5年前
住所: 山梨
連絡を取る:

Re: FileRead_openで応答なしになってしまいます

#4

投稿記事 by axis » 5年前

ログを使って調べていたところ新たな事が分かりました。
応答なしになるのはBossまたはEnemyクラスでFileRead_close();
したあとの次のファイルにアクセスする文らしいです。(画像またはファイル)

さっきまではEnemyをnewしてその次にBossをnewしたため、FileRead_open();が止まったようです。

コード:

	mPlayer = new Player(this);
	mBoard = new Board;
	mEnmMgr = new EnmMgr(this);
	mBoss = new Boss(this);
newの順番を変えたら今度はPlayerクラスのコンストラクタで絵をロードする関数で止まっています。

コード:

	mEnmMgr=new EnmMgr(this);
	mPlayer=new Player(this);	
	mBoard=new Board;
	mBoss = new Boss(this);
同じcsvファイルを2回読み込んでいるのが原因でしょうか
ビギナーです。

アバター
へにっくす
記事: 630
登録日時: 8年前
住所: 東京都

Re: FileRead_openで応答なしになってしまいます

#5

投稿記事 by へにっくす » 5年前

ざっと見た感じですが、同じcsvファイルを指定しているのが原因ぽいですね。
Boss/Enumyでも使っているのなら、Stageクラスでcsvを開き、そのハンドルfpをBoss/Enumyに渡すようにすればよいのではないでしょうか。
そうすれば各クラスでいちいち開く/閉じるのペアを書く必要はなくなると思うのですが。
(その代り、読み込んだ後のファイルの位置を考慮しないといけませんが・・・)

というか、私なら、test.csvで得たデータはStageクラスかまたは別クラス(データ管理クラス?)で保持しておき、
Boss/Enumyでそのデータ管理クラスから得るようにすると思います。
データを一つのファイルにするなら、専用のクラスを作った方がいいと思いますよ。
written by へにっくす

アバター
axis
記事: 10
登録日時: 5年前
住所: 山梨
連絡を取る:

Re: FileRead_openで応答なしになってしまいます

#6

投稿記事 by axis » 5年前

何度も有難うございます
ハンドルを渡す方式に変えてみて、ダメだったら専用のクラスを作りたいと思います
ビギナーです。

アバター
axis
記事: 10
登録日時: 5年前
住所: 山梨
連絡を取る:

Re: FileRead_openで応答なしになってしまいます

#7

投稿記事 by axis » 5年前

ハンドルを渡す方法で無事解決しました!
有難うございました
ビギナーです。

閉鎖

“C言語何でも質問掲示板” へ戻る