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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
sozai
記事: 57
登録日時: 6年前
住所: 日本-関東
連絡を取る:

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

#1

投稿記事 by sozai » 6年前

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

ちなみに通常はこうなります。
app.jpg
app.jpg (48.1 KiB) 閲覧数: 1017 回
添付ファイル
TestApp.zip
(389.62 KiB) ダウンロード数: 26 回
[hr]
Is it true?
Function = a==b;

アバター
みけCAT
記事: 6246
登録日時: 9年前
住所: 千葉県
連絡を取る:

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

#2

投稿記事 by みけCAT » 6年前

game.cppのscが持っているkが持っているkeyが未初期化のため不定の値が入っており、
それがたまたま0ではなかったのでScenes::Menuの中のchangeSceneByKeyにより画面が切り替わったものと思われます。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

sozai
記事: 57
登録日時: 6年前
住所: 日本-関東
連絡を取る:

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

#3

投稿記事 by sozai » 6年前

>みけCATさん
返信ありがとうございます。
keyを初期化するよう変更してみます。
[hr]
Is it true?
Function = a==b;

sozai
記事: 57
登録日時: 6年前
住所: 日本-関東
連絡を取る:

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

#4

投稿記事 by sozai » 6年前

以下のようにコードを変更したのですが、起動してもタイトル・メニュー画面になりませんでした。

コード:

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

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

}
[hr]
Is it true?
Function = a==b;

アバター
みけCAT
記事: 6246
登録日時: 9年前
住所: 千葉県
連絡を取る:

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

#5

投稿記事 by みけCAT » 6年前

起動するとタイトル画面になり、1キーを押すとStage1が始まるところまで改造しました。
1階層上からコマンドプロンプトでTestApp.exeを起動することにより、画像も表示されました。
添付ファイル
TestApp_modified.zip
改造済みTestApp
(1.97 MiB) ダウンロード数: 21 回
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

sozai
記事: 57
登録日時: 6年前
住所: 日本-関東
連絡を取る:

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

#6

投稿記事 by sozai » 6年前

ソースコードありがとうございます。
今までは単純に変数に別名を付けるだけだと思っていたレファレンス(参照)を使えば
オブジェクトをコピーせずに渡すことに驚きました。
もしかして、オブジェクトを値渡しで渡していたからあのようなことが起きてしまったのでしょうか?
[hr]
Is it true?
Function = a==b;

アバター
みけCAT
記事: 6246
登録日時: 9年前
住所: 千葉県
連絡を取る:

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

#7

投稿記事 by みけCAT » 6年前

「オブジェクトを値渡しで渡していたから」ではありません。
そもそもWinMain関数からscにオブジェクトを渡さずに、独立したKeyクラスのオブジェクトを使用していた問題を修正しました。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

sozai
記事: 57
登録日時: 6年前
住所: 日本-関東
連絡を取る:

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

#8

投稿記事 by sozai » 6年前

みけCAT さんが書きました:「オブジェクトを値渡しで渡していたから」ではありません。
そもそもWinMain関数からscにオブジェクトを渡さずに、独立したKeyクラスのオブジェクトを使用していた問題を修正しました。
そうだったんですか。
とりあえず、当初の問題は解決しましたので「解決」としておきます。
「独立したオブジェクトを使用するのがまずい理由」はググって理解しておきます。
[hr]
Is it true?
Function = a==b;

閉鎖

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