龍神録プログラミングの館を参考に、東方シリーズ風のシューティングゲーム作りに取り組んでいます。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);
}
}