とある課題で、ゲームのメニュー画面を制作しているものです。
現在矢印キーとw、s、マウスのホイールで上下のメニュー選択はきちんと出来ているのですが、最近のゲームみたいにマウスカーソルでマウスの指したところでもメニュー選択出来ればなと思い色々試行錯誤しているのですがなかなかできなくて困っています。
色々考えを巡らしているのですが、途方に暮れています。
何かアドバイス、良い案があればご提示ください、お願いいたします。
動作環境は
OS: Windows 11 バージョン 22H2
開発環境は
Visual stdio 2022
です。
一部にはなりますが、ソースコードはっておきます。
static int NowSelect = eMenu_Game; //現在の選択状態(初期はゲーム選択中)
//更新
void Menu_Update() {
int x, y, Mouse, Wheel;
int MouseX, MouseY;
Mouse = GetMouseInput(); //マウスの入力状態取得
Wheel = GetMouseWheelRotVol(); //ホイールの回転量取得
if (Keyboard_Get(KEY_INPUT_DOWN) == 1 || Keyboard_Get(KEY_INPUT_S) == 1 || Wheel < 0 ) {//下キーが押されているかつホイールが-方向に回転していたら
NowSelect = (NowSelect + 1) % eMenu_Num;//選択状態を一つ下げる
}
if (Keyboard_Get(KEY_INPUT_UP) == 1 || Keyboard_Get(KEY_INPUT_W) == 1 ||Wheel > 0 ) {//上キーが押されているかつホイールが+方向に回転していたら
NowSelect = (NowSelect + (eMenu_Num - 1)) % eMenu_Num;//選択状態を一つ上げる
}
if (Keyboard_Get(KEY_INPUT_RETURN) == 1 || (GetMouseInput() & MOUSE_INPUT_LEFT) != 0) {//エンターキーが押されたら
switch (NowSelect) {//現在選択中の状態によって処理を分岐
case eMenu_Game://ゲーム選択中なら
SceneMgr_ChangeScene(eScene_Game);//シーンをゲーム画面に変更
break;
case eMenu_Conf://設定選択中なら
SceneMgr_ChangeScene(eScene_Config);//シーンを設定画面に変更
break;
case eMenu_Help://設定選択中なら
SceneMgr_ChangeScene(eScene_Help);//シーンを設定画面に変更
break;
case eMenu_Exit://やめる選択中なら
DxLib_End();
}
}
}
//描画
void Menu_Draw() {
DrawString(180, 60, "メニュー画面", GetColor(255, 255, 255));
DrawString(10, 170, "※上下キー又はw、s、ホイールを動かし、エンターか左クリックを押して下さい。", GetColor(255, 255, 255));
DrawString(280, GAME_Y, "ゲーム", GetColor(255, 255, 255));
DrawString(280, CONF_Y, "設定", GetColor(255, 255, 255));
DrawString(280, HELP_Y, "説明", GetColor(255, 255, 255));
DrawString(280, EXIT_Y, "やめる", GetColor(255, 255, 255));
int y = 0;
switch (NowSelect) {//現在の選択状態に従って処理を分岐
case eMenu_Game://ゲーム選択中なら
DrawString(280, GAME_Y, "ゲーム", GetColor(0, 255, 0));//緑にさせる
y = GAME_Y; //ゲームの座標を格納
break;
case eMenu_Conf://設定選択中なら
DrawString(280, CONF_Y, "設定", GetColor(0, 255, 0));//緑にさせる
y = CONF_Y; //設定の座標を格納
break;
case eMenu_Help://設定選択中なら
DrawString(280, HELP_Y, "説明", GetColor(0, 255, 0));//緑にさせる
y = HELP_Y; //説明の座標を格納
break;
case eMenu_Exit://やめる選択中なら
DrawString(280, EXIT_Y, "やめる", GetColor(0, 255, 0));//緑にさせる
y = EXIT_Y;
}
DrawString(250, y, "■", GetColor(0, 255, 0));//緑の■
}