dxライブラリを用いてマウスカーソルを画像に合わせると効果音が鳴るようにプログラムを作っているのですが、マウスカーソルの位置が画像と重なっているかどうかをstatic型で状態を保持しようとしてもカーソルを合わせている間音が連続して鳴り続けてしまいます。下に載せたコードに何か問題があれば教えて欲しいです。また、改善策や他のやり方があればそれも教えて欲しいです。
※コードについて、1つ目のコードのSceneMgr_Draw関数から2つ目のコードのMenu_Draw関数に飛んでいると見て下さい。
code
#include "DxLib.h"
#include "SceneMgr.h"
#include "Keyboard.h"
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK); //ウィンドウモード変更と初期化と裏画面設定
int x, y, Mouse;
double size = 1.0;
while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0) {//画面更新 & メッセージ処理 & 画面消去
Keyboard_Update(); //キーボードの更新
SceneMgr_Update(); //更新
SceneMgr_Draw(); //描画
Mouse = GetMouseInput(); //マウスの入力状態取得
GetMousePoint(&x, &y); //マウスの座標取得
if (Mouse & MOUSE_INPUT_LEFT) {
DrawString(0, 0, "Push_Right", GetColor(255, 255, 255));
}
}
DxLib_End(); // DXライブラリ終了処理
return 0;
}
/code
code
#include "Menu.h"
#include "SceneMgr.h"
#include "DxLib.h"
#include "Keyboard.h"
static int snd;
//描画
void Menu_Draw() {
int Mouse,mouse_x,mouse_y;
Mouse = GetMouseInput(); //マウスの入力状態取得
GetMousePoint(&mouse_x, &mouse_y); //マウスの座標取得
int title_back,tab_t,tab_f,finish_t,finish_f,cursol_snd;
title_back = LoadGraph("画像/Scene_Menu.png");
tab_t = LoadGraph("画像/game_no.png");
tab_f = LoadGraph("画像/game_cursol.png");
finish_t = LoadGraph("画像/finish_no.png");
finish_f = LoadGraph("画像/finish_cursol.png");
cursol_snd = LoadSoundMem("サウンド/カーソル_メニュー.wav");
DrawGraph(0, 0, title_back, TRUE);
if (mouse_x > 240 && mouse_x < 360 && mouse_y > 225 && mouse_y < 265) {
DrawGraph(240, 225, tab_f, TRUE);
if(snd == 0){
snd = 1;
PlaySoundMem(cursol_snd, DX_PLAYTYPE_BACK);
}
} else {
DrawGraph(240, 225, tab_t, TRUE);
if (snd != 0) {
snd = 0;
}
}
if(mouse_x > 240 && mouse_x < 360 && mouse_y > 300 && mouse_y < 340) {
DrawGraph(240, 300, finish_f, TRUE);
if (snd == 0) {
snd = 1;
PlaySoundMem(cursol_snd, DX_PLAYTYPE_BACK);
}
} else {
DrawGraph(240, 300, finish_t, TRUE);
if (snd != 0) {
snd = 0;
}
}
DrawString(200, 150, "メニュー画面です。", GetColor(255, 255, 255));
DrawString(200, 170, "カーソルを選択してクリックして下さい。", GetColor(255, 255, 255));
}
/code
static型の静的な変数について
Re: static型の静的な変数について(追記)
コードの貼り付けが間違っていたので貼り直します。
#include "DxLib.h"
#include "SceneMgr.h"
#include "Keyboard.h"
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK); //ウィンドウモード変更と初期化と裏画面設定
int x, y, Mouse;
double size = 1.0;
while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0) {//画面更新 & メッセージ処理 & 画面消去
Keyboard_Update(); //キーボードの更新
SceneMgr_Update(); //更新
SceneMgr_Draw(); //描画
Mouse = GetMouseInput(); //マウスの入力状態取得
GetMousePoint(&x, &y); //マウスの座標取得
if (Mouse & MOUSE_INPUT_LEFT) {
DrawString(0, 0, "Push_Right", GetColor(255, 255, 255));
}
}
DxLib_End(); // DXライブラリ終了処理
return 0;
}
#include "Menu.h"
#include "SceneMgr.h"
#include "DxLib.h"
#include "Keyboard.h"
static int snd;
//描画
void Menu_Draw() {
int Mouse,mouse_x,mouse_y;
Mouse = GetMouseInput(); //マウスの入力状態取得
GetMousePoint(&mouse_x, &mouse_y); //マウスの座標取得
int title_back,tab_t,tab_f,finish_t,finish_f,cursol_snd;
title_back = LoadGraph("画像/Scene_Menu.png");
tab_t = LoadGraph("画像/game_no.png");
tab_f = LoadGraph("画像/game_cursol.png");
finish_t = LoadGraph("画像/finish_no.png");
finish_f = LoadGraph("画像/finish_cursol.png");
cursol_snd = LoadSoundMem("サウンド/カーソル_メニュー.wav");
DrawGraph(0, 0, title_back, TRUE);
if (mouse_x > 240 && mouse_x < 360 && mouse_y > 225 && mouse_y < 265) {
DrawGraph(240, 225, tab_f, TRUE);
if(snd == 0){
snd = 1;
PlaySoundMem(cursol_snd, DX_PLAYTYPE_BACK);
}
} else {
DrawGraph(240, 225, tab_t, TRUE);
if (snd != 0) {
snd = 0;
}
}
if(mouse_x > 240 && mouse_x < 360 && mouse_y > 300 && mouse_y < 340) {
DrawGraph(240, 300, finish_f, TRUE);
if (snd == 0) {
snd = 1;
PlaySoundMem(cursol_snd, DX_PLAYTYPE_BACK);
}
} else {
DrawGraph(240, 300, finish_t, TRUE);
if (snd != 0) {
snd = 0;
}
}
DrawString(200, 150, "メニュー画面です。", GetColor(255, 255, 255));
DrawString(200, 170, "カーソルを選択してクリックして下さい。", GetColor(255, 255, 255));
}