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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アスク

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

#1

投稿記事 by アスク » 13年前

シューティングゲームで自機が弾を撃った時に効果音を鳴らしたいので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;
}

jay
記事: 314
登録日時: 15年前
住所: 大阪市
連絡を取る:

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

#2

投稿記事 by jay » 13年前

学校からこんにちは(おはようございます?)

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

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


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

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


とりあえずパッと見た感じで思いついた、問題の原因になりそうな所は以上2つになります
確認してみてください
♪僕たちは まだ森の中 抜け出そう 陽のあたる場所へ

アスク

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

#3

投稿記事 by アスク » 13年前

oggファイルにちょこっと空白があったみたいです

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

ありがとうございます!


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

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


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

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

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

閉鎖

“C言語何でも質問掲示板” へ戻る