ページ 11

シューティングゲームの効果音が鳴るのが遅い

Posted: 2012年10月19日(金) 06:05
by アスク
シューティングゲームで自機が弾を撃った時に効果音を鳴らしたいのでDxライブラリのPlaySoundMem関数を使い、デバッグをして効果音がちゃんと鳴るかテストしたのですが、自機が弾を撃った1秒後に効果音が出てしまいます。
どうしたら自機が弾を撃った瞬間に効果音を出せるのでしょうか?

OSはwindows 7 Home Premium

コンパイラはVC++ 2010 Express Editionです

ちなみに効果音の拡張子はoggです

以下、再現コードです

コード:

#include "DxLib.h"

int sonudh; //効果音のサウンドハンドルが入る変数

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
{
 ChangeWindowMode(TRUE),DxLib_Init();

soundh = LoadSoundMem("sound.ogg");  //soundhにsound.oggのサウンドハンドルを入れる

while( !ProcessMessage() )
 {
    if( CheckHitKey( KEY_INPUP_SPACE ) ==1 )
    {  
       PlaySoundMem(soundh ,DX_PLAYTYPE_BACK ,TRUE);
    }   //スペースキーが押されたら効果音をバックグラウンドで再生
 }
DxLib_End();
return 0;
}

Re: シューティングゲームの効果音が鳴るのが遅い

Posted: 2012年10月19日(金) 09:48
by jay
学校からこんにちは(おはようございます?)

さて、早速本題ですが
これはプログラムの方に問題があるとは限りませんね

もしかするとoggファイルの方に問題があるかもしれません
Sound Engine Free のような波形編集ファイルで一度oggファイルの中身を確認してみてはどうでしょうか?
ファイルの先頭に1秒ほどの空白が存在していた、なんてことも稀にあります。


あとひとつ、プログラムの方で気になったことがありますが
CheckHitKey( KEY_INPUP_SPACE ) ==1 の間、ずっとPlaySoundMem関数が呼び出される仕様になっていますよね?
つまりスペースキーを押している間は毎フレーム音の再生をするように指示が飛んでいます。
音は一回発射するごとに一度なればいいだけの筈ですが、読み込まれた音が鳴る前にまた鳴らそうとすると、不具合の原因になります

スペースキーを押している間、数フレームに一回だけなるように改良してみてはどうでしょうか?


とりあえずパッと見た感じで思いついた、問題の原因になりそうな所は以上2つになります
確認してみてください

Re: シューティングゲームの効果音が鳴るのが遅い

Posted: 2012年10月19日(金) 13:33
by アスク
oggファイルにちょこっと空白があったみたいです

jayさんが言っていたフリーソフトで空白を取り除いたらちゃんと再生されました!

ありがとうございます!


>あとひとつ、プログラムの方で気になったことがありますが
>CheckHitKey( KEY_INPUP_SPACE ) ==1 の間、ずっとPlaySoundMem関数が呼び出される仕様になっていますよね?
>つまりスペースキーを押している間は毎フレーム音の再生をするように指示が飛んでいます。
>音は一回発射するごとに一度なればいいだけの筈ですが、読み込まれた音が鳴る前にまた鳴らそうとすると、不具合の原因になります

>スペースキーを押している間、数フレームに一回だけなるように改良してみてはどうでしょうか?


それは考えていなかったです

数フレームに一回だけ鳴らすようにしてみます

本当にありがとうございます