ページ 11

【龍神録】オプションバグ

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]だけしか初期化できていなかったようで、
提示されたコードを使ってみたところ、バグが消えました。ありがとうございます。