ページ 11

キーを押してもいないのに画面が切り替わる

Posted: 2013年10月16日(水) 17:02
by sozai
現在、ゲームもどきをDxlibで作っていて、そのコードのリファクタリング中です。
キー入力を受け付ける関数などのあるファイルをクラスにし、文法的なエラーを0にして実行したところ、
写真のような状態で実行されてしまいました(縦に並んだ数字はデバッグ時に使用したDxPrintf命令によるものです)。
error.jpg
error.jpg (39.88 KiB) 閲覧数: 4924 回
正直、なぜこうなるのか分かりません。
中途半端な知識でクラス化したことは原因の一つだと思いますが...

ちなみに通常はこうなります。
app.jpg
app.jpg (48.1 KiB) 閲覧数: 4924 回

Re: キーを押してもいないのに画面が切り替わる

Posted: 2013年10月16日(水) 17:21
by みけCAT
game.cppのscが持っているkが持っているkeyが未初期化のため不定の値が入っており、
それがたまたま0ではなかったのでScenes::Menuの中のchangeSceneByKeyにより画面が切り替わったものと思われます。

Re: キーを押してもいないのに画面が切り替わる

Posted: 2013年10月16日(水) 17:24
by sozai
>みけCATさん
返信ありがとうございます。
keyを初期化するよう変更してみます。

Re: キーを押してもいないのに画面が切り替わる

Posted: 2013年10月16日(水) 17:38
by sozai
以下のようにコードを変更したのですが、起動してもタイトル・メニュー画面になりませんでした。

コード:

//Key.cpp内
Key::Key(){

	for(int i=0;i<256;i++){
		key[i] = 0;
	}

}

Re: キーを押してもいないのに画面が切り替わる

Posted: 2013年10月16日(水) 17:39
by みけCAT
起動するとタイトル画面になり、1キーを押すとStage1が始まるところまで改造しました。
1階層上からコマンドプロンプトでTestApp.exeを起動することにより、画像も表示されました。

Re: キーを押してもいないのに画面が切り替わる

Posted: 2013年10月18日(金) 20:05
by sozai
ソースコードありがとうございます。
今までは単純に変数に別名を付けるだけだと思っていたレファレンス(参照)を使えば
オブジェクトをコピーせずに渡すことに驚きました。
もしかして、オブジェクトを値渡しで渡していたからあのようなことが起きてしまったのでしょうか?

Re: キーを押してもいないのに画面が切り替わる

Posted: 2013年10月18日(金) 22:10
by みけCAT
「オブジェクトを値渡しで渡していたから」ではありません。
そもそもWinMain関数からscにオブジェクトを渡さずに、独立したKeyクラスのオブジェクトを使用していた問題を修正しました。

Re: キーを押してもいないのに画面が切り替わる

Posted: 2013年10月19日(土) 19:02
by sozai
みけCAT さんが書きました:「オブジェクトを値渡しで渡していたから」ではありません。
そもそもWinMain関数からscにオブジェクトを渡さずに、独立したKeyクラスのオブジェクトを使用していた問題を修正しました。
そうだったんですか。
とりあえず、当初の問題は解決しましたので「解決」としておきます。
「独立したオブジェクトを使用するのがまずい理由」はググって理解しておきます。