実現したいこと
スペースキーで弾を発射し、発射したタイミングで効果音を流したい
前提
dxライブラリで横スクロールシューティングを制作しています。
弾を発射した際に効果音も一緒に流したいのですが、流れる事には流れるのですが、処理が重いのか自機の動きがかなり遅くなっています
どの部分が不適切なのでしょうか
エラーメッセージは特には出ていません
該当のソースコード
c++
1 2void Player::MovePlayer() 3{ 4 int SeHandle = LoadSoundMem("Sound/Shot.mp3"); 5 static char oldSpcKey; //1つ前のスペースキーの状態を保持する変数 6 static int countSpcKey; //スペースキーを押し続けている間、カウントアップする変数 7 if (CheckHitKey(KEY_INPUT_A) == 1) 8 { 9 player.x -= speed; 10 if (player.x < 0) 11 { 12 player.x = 0; 13 } 14 } 15 16 if (CheckHitKey(KEY_INPUT_S) == 1) 17 { 18 player.y += speed; 19 if (player.y > 670) 20 { 21 player.y = 670; 22 } 23 } 24 25 if (CheckHitKey(KEY_INPUT_W) == 1) 26 { 27 player.y -= speed; 28 if (player.y < 0) 29 { 30 player.y = 0; 31 } 32 } 33 34 if (CheckHitKey(KEY_INPUT_D) == 1) 35 { 36 player.x += speed; 37 if (player.x > 600) 38 { 39 player.x = 600; 40 } 41 } 42 43 if (CheckHitKey(KEY_INPUT_SPACE) == 1) 44 { 45 int ad = 0; 46 int CheckSound = 0; 47 if (oldSpcKey == 0) 48 { 49 PlaySoundMem(SeHandle, DX_PLAYTYPE_BACK); 50 SetBullet(); 51 ad = CheckSoundMem(SeHandle); 52 } 53 else if (countSpcKey % 20 == 0)//一定間隔で発射 54 { 55 PlaySoundMem(SeHandle, DX_PLAYTYPE_BACK); 56 SetBullet(); 57 ad = CheckSoundMem(SeHandle); 58 } 59 DrawFormatString(100, 100, GetColor(255, 255, 255), "%d", ad); 60 countSpcKey++; 61 } 62 else 63 { 64 countSpcKey = 0; 65 } 66 oldSpcKey = CheckHitKey(KEY_INPUT_SPACE); //スペースキーの状態を保持 67 DrawBox(player.x, player.y, player.x + 30, player.y + 50, GetColor(255,255,255), TRUE); 68}
使用している環境はvisual studio 2022です
dxライブラリ初心者ですので何卒お手柔らかにお願いいたします。
気になった点をお伝えします。
void Player::MovePlayer()
{
int SeHandle = LoadSoundMem("Sound/Shot.mp3");
これでは MovePlayer() が呼び出される度に Shot.mp3 がメモリに読み込まれヒープメモリ使用量が増大していきます。
所謂メモリリークしている状況です。
Player であれば コンストラクタで LoadSoundMem してデストラクタで DeleteSoundMem することをお勧めします。
処理が重いのも、恐らくlehshellさんが指摘されたことが影響している気がします。MovePlayerメンバー関数は(恐らく)1フレームずつ(1秒に約60回)描画するタイミングで呼んでいると思うのですが、そのタイミングで毎回LoadSoundMem("Sound/Shot.mp3");も呼ぶと、そのたびにファイルのロードとメモリ消費量の増大でどんどん遅くなっているかと思います。Windowsのタスクマネージャーで確認してみても分るんじゃないでしょうかね。
lehshellさまとdodox86さまの修正案で正しく動かせました!
本当にありがとうございます!
あなたの回答
tips
プレビュー