キャラクタ移動制御とキー入力

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
エミリー
記事: 2
登録日時: 3年前

キャラクタ移動制御とキー入力

#1

投稿記事 by エミリー » 3年前

こんにちは。
龍神録プログラミングの館を参考に、東方シリーズ風のシューティングゲーム作りに取り組んでいます。DxライブラリとC++を使用しています。OSはwindows、IDEはvisual studio 2019を使用しています。

現在自機キャラクターの移動制御をしています。キーボード入力のみ対応しており、ジョイパッド対応はしていません。左シフトキー入力時、低速で動くようにしています。

低速時にキャラクタを斜め上方向に動かそうとすると、うまく反映されないことに気が付きました。斜め下方向は反映されています。
具体的には、「シフトキー+左キー+上キー/シフトキー+右キー+上キー」の2パターン入力時、うまくキャラクタが移動しません。

「シフトキー+上/シフトキー+右」等、二つのキー入力のみの場合、移動がうまくいきます。通常時の移動は、すべて問題ありません。

該当部分のコードは以下の通りとなります。ch.x, ch.yはキャラクタの位置を表します。ch.directionはキャラクタ画像描画のためのvariableで、この質問との関連性はないかと思います。ch.slowは低速移動の有無を表します。

Debuggingをしましたが、斜め上入力がうまくいかない理由が見つかりませんでした。そのため改善方法もわかりません。以下コードに問題がある場合、教えていただけませんでしょうか。よろしくお願いします。
不足等ある場合には、追記いたします。

コード:

	/*respose to the user input*/
	if (CheckHitKey(KEY_INPUT_LSHIFT) != 1) {
		if (CheckHitKey(KEY_INPUT_UP) == 1) ch.y -= 4.0;
		if (CheckHitKey(KEY_INPUT_DOWN) == 1) ch.y += 4.0;
		if (CheckHitKey(KEY_INPUT_LEFT) == 1) {
			ch.x -= 4.0;
			ch.direction = 2;
		}
		if (CheckHitKey(KEY_INPUT_RIGHT) == 1) {
			ch.x += 4.0;
			ch.direction = 4;
		}
	}
	else {
		ch.slow = 1;
		if (CheckHitKey(KEY_INPUT_UP) == 1) ch.y -= 2.0;
		if (CheckHitKey(KEY_INPUT_DOWN) == 1) ch.y += 2.0;
		if (CheckHitKey(KEY_INPUT_LEFT) == 1) {
			ch.x -= 2.0;
			ch.direction = 2;
		}
		if (CheckHitKey(KEY_INPUT_RIGHT) == 1) {
			ch.x += 2.0;
			ch.direction = 4;
		}
	}
	
	/*drawing my charactor*/
	// if the charactor is in normal status (no hit)
	if (ch.flag == 1) {
		DrawRotaGraphF(ch.x, ch.y, 1.0f, 0.0f, img_ch[ch.direction], TRUE);
		if (ch.slow == 1) {
			// when moving slow, show the hit area of my charactor
			DrawRotaGraphF(ch.x, ch.y, 1.0f, 0.0f, img_tama[1], TRUE);
		}
	}

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

Re: キャラクタ移動制御とキー入力

#2

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

キーボードの仕様の可能性があります。
もしそうであれば、「Nキーロールオーバー」のキーボードにすると改善するでしょう。
まずは移動処理を切り離して、キー入力がうまく取れているかだけをチェックしましょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

エミリー
記事: 2
登録日時: 3年前

Re: キャラクタ移動制御とキー入力

#3

投稿記事 by エミリー » 3年前

みけCATさん、
仰る通り、キーボードが原因の可能性が高そうです。キーボードテストをしたところ「シフト+上方向キー+右or左方向キー」入力時に、上・左右とも方向キーの入力が無効になっているのが確認できました。

ただ、「シフト+下方向キー+左or右キー」「コントロールキー+下方向キー+左キー」「文字キー4つ同時押し」等、他条件下では複数キー入力でもきちんと認識されているようです。なぜ斜め上方向のみ入力が無効なのかは不明でした。

コードだけでなく、入力デバイスに気を配ることも大切ですね。アドバイスありがとうございました。

返信

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