ページ 11

DXライブラリでSEを鳴らすとおかしくなる

Posted: 2010年6月04日(金) 16:26
by みなと
敵と当たったらSEを鳴らしたいのですが音声がループしてしまいます。
直す方法はないのでしょうか?
int sound;

main~{
  sound = LoadSoundMem( "DATA/SOUND/SE/death.wav" ) ;
  while(1){
     if(当たったら)PlaySoundMem( sound , DX_PLAYTYPE_BACK ) ; // NORMALでも駄目でした・・・。
  }
}

Re:DXライブラリでSEを鳴らすとおかしくなる

Posted: 2010年6月04日(金) 16:36
by シエル
当たり判定は間違ってませんか?

Re:DXライブラリでSEを鳴らすとおかしくなる

Posted: 2010年6月04日(金) 18:06
by みなと
シエル様
判定はおかしくないです・・・。
whileの中に書いている為、while回数分再生されてしまうのかと・・・。
これを回避したいのですがDXライブラリではSEには対応していないのでしょうか?

Re:DXライブラリでSEを鳴らすとおかしくなる

Posted: 2010年6月04日(金) 18:20
by ru
if(当たったら)を消したら鳴るか?
death.wav読み込めているか?
>これを回避したいのですがDXライブラリではSEには対応していないのでしょうか?
SEとか関係ないです

Re:DXライブラリでSEを鳴らすとおかしくなる

Posted: 2010年6月04日(金) 18:31
by dic
if(当たったら)
の条件を満たしている間再生さる設計ですが
一回のみ鳴らしたいので2回目以降は鳴らさないようにフラグが必要ではないでしょうか?

Re:DXライブラリでSEを鳴らすとおかしくなる

Posted: 2010年6月04日(金) 18:41
by wing
私もゲームを作っていてSEがなりっぱなしになったことがありました。
while(ProcessLoop()==0){//メインループ
        for(int i=0; i<SE_MAX; i++)
            se_flag = 0;
        switch(gstate){
            case GAME_INIT:
                first_init();
                load();
                gstate = GAME_TITLE;
                break;

私の場合は、上記のコードで
 for(int i=0; i<SE_MAX; i++)
   se_flag = 0;
の書き忘れでした。

Re:DXライブラリでSEを鳴らすとおかしくなる

Posted: 2010年6月05日(土) 02:29
by みなと
皆様ご回答ありがとうございます。

ゲームの開始時に一回だけ実行する関数をテストで作り
そこで鳴らすと問題なくなってくれているので音の読み込みは出来ております。

SEを鳴らす場合、そのSEごとにFlagを用意する必要があるのですか・・・。
少々、面倒ですね・・・。

ただFlagを用意しても問題があるかと思います。
そのFlagを鳴ってない時に限り毎フレームfalseにしたとしても
当たり判定にいる間はない続けてしまいますよね?

Re:DXライブラリでSEを鳴らすとおかしくなる

Posted: 2010年6月05日(土) 05:50
by Ma
フラグなんてつくる必要ないです。

念のため以下を確認してください。


if(当たったら)PlaySoundMem( sound , DX_PLAYTYPE_BACK ) ;

if(当たったら){PlaySoundMem( sound , DX_PLAYTYPE_BACK ) ; }

でなおるかどうか。


毎フレーム ProcessMessage() を呼んでいるか確認してください。


if文内にbreak point をいれるか、printfDx 等をいれて、必要なときにしかif文内に入っていないか確認してください。


*追記:本題とは関係ないとおもいますが・・・

dicさんも言っていますが、当たっている間再生しなおす設計になっているので
if(当たり && CheckSoundMem(sound) == 0){PlaySoundMem( sound , DX_PLAYTYPE_BACK ) ; }

等の処置をいれるといいかと。
あるいは、前フレームであたっていたか確認するためのフラグを作るなどの方法でも可。

*本来の問題はループ再生してしまうことであって、再生のしなおしではないのでこれが原因ではないはずです。
(これが問題だったとしたら、ループというよりずっと最初の音がなり続ける事になると思います。) 画像

Re:DXライブラリでSEを鳴らすとおかしくなる

Posted: 2010年6月05日(土) 11:13
by Dixq (管理人)
プログラムコードをアップした方が早そうな気がするのですがどうでしょう?