ページ 1 / 1
【龍神録】オプションバグ
Posted: 2014年9月03日(水) 16:54
by amehirune
今回は、「第49章 自機ショットにオプションを付けてみよう」に関して、バグと思ったことがあったので質問します。
端的に申しますと、初回起動時(?)にはバグは発生しません。
ただ、私のプログラムには「リトライ」「中断」機能がすでに実装されていて、
それを実行した後に再度ゲームスタートをすると、なぜか変な位置に最初からオプションが描写されています。
(ただしそこからショットは出てきません。)
そして、パワーが1以上になったら(オプションが追加されたら)「変な位置」にあったものは消え、きちんとオプションは配置されました。
しかし、ふわふわ浮くタイミングがかなりずれていて、とても気になっております。
ソースコードはあまり変えておりません。威力や位置をいじっただけです。
どうすれば治るのでしょうか?
参考までに、あとでスクリーンショットを載せておきます。
リトライや中断してから再スタートするときに、option_bb_tは初期化してあります。
Re: 【龍神録】オプションバグ
Posted: 2014年9月03日(水) 16:57
by amehirune
これがスクリーンショットです
Re: 【龍神録】オプションバグ
Posted: 2014年9月03日(水) 16:58
by amehirune
2枚目です
Re: 【龍神録】オプションバグ
Posted: 2014年9月03日(水) 17:06
by Rittai_3D
printfDxやDrawFormatStringで数値を確認してみましたか?
コードが無いのでなんとも言えません。
Re: 【龍神録】オプションバグ
Posted: 2014年9月03日(水) 17:42
by amehirune
3D_3D さんが書きました:printfDxやDrawFormatStringで数値を確認してみましたか?
コードが無いのでなんとも言えません。
ご回答ありがとうございます。
数値の方を確認したところ、option_bb[1].flagが初期化されていませんでした。
(尚、ソースコードの方はほぼ龍神録と同じなので、そちらをご参照ください。ここに張ると長くなってしまうので)
コード:
//struct.h オプションに関する構造体
typedef struct{
int flag,img,cnt;
double x,y;
}option_bb_t;
//GV.h
GLOBAL option_bb_t option_bb[2];
//ini.cpp
memset(&option_bb,0,sizeof(option_bb_t));
上記の構造体をmemsetで初期化したつもりが、できていなかったようです。
ですが、どのように初期化するのが正解なのか、わかりません。
Re: 【龍神録】オプションバグ
Posted: 2014年9月03日(水) 17:52
by Rittai_3D
間違えた事を言っているかもしれませんが、
コード:
memset( option_bb, p, sizeof( option_bb ) );
で初期化出来ると思います。
提示されたコードだと、option_bb[0]だけを初期化しているのでは無いのでしょうか?
sizeof( option_bb_t ) はoption_bb_t "だけの" サイズです。
配列全部のサイズではなく、一つ分のサイズです。
もとのコードのままでしたいなら
コード:
// いろいろ省略
for( int i=0 ; i<2 ; i++ ) {
memset( &option_bb[i], 0, sizeof( option_bb_t ) );
}
でしょうか。
Re: 【龍神録】オプションバグ
Posted: 2014年9月03日(水) 17:59
by amehirune
ありがとうございます。おっしゃる通り、[0]だけしか初期化できていなかったようで、
提示されたコードを使ってみたところ、バグが消えました。ありがとうございます。